C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++でvectorから指定インデックスの要素を削除する方法:erase()関数の使い方を解説

C++のvectorクラスには、要素を削除するためのerase()関数が用意されています。この関数を使えば、指定したインデックス位置の要素を簡単に取り除けます。ただし、erase()はインデックスを直接受け取るのではなく、削除対象の要素を指すイテレータを渡す必要があります。具体的には「v.begin() + index」という形式で指定します。ここでvはvectorオブジェクト、v.begin()は先頭要素(0番目の要素)を指すイテレータです。これにインデックスを加算することで、目的の位置にある要素へアクセスできます。

削除の流れ

例として、v = [5, 8, 6, 3, 2, 0, 1, 4] というベクトルから、インデックス 2、6、5 の順に要素を削除するケースを考えてみましょう。

  • v.erase(v.begin()+2) を実行 → インデックス2の要素「6」が削除され、[5, 8, 3, 2, 0, 1, 4] になります
  • v.erase(v.begin()+6) を実行 → インデックス6の要素「4」が削除され、[5, 8, 3, 2, 0, 1] になります
  • v.erase(v.begin()+5) を実行 → インデックス5の要素「1」が削除され、[5, 8, 3, 2, 0] になります

このように、erase()で要素を1つ削除するたびに、後ろの要素が前に詰められてインデックスが変化します。複数の要素を削除する場合は、このずれに注意しながらインデックスを指定することが重要です。

サンプルコード

以下の実装例で、実際の動作を確認してみましょう。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
    vector<int> v = {5,8,6,3,2,0,1,4};
    v.erase(v.begin()+2);
    v.erase(v.begin()+6);
    v.erase(v.begin()+5);
    for(int i = 0; i<v.size(); i++){
        cout << v[i] << " ";
    }
}

入力

{5,8,6,3,2,0,1,4}

出力

5 8 3 2 0

erase()を使う際の注意点

  • erase()を呼び出すと、削除位置以降のイテレータは無効化されます。ループ内で繰り返し削除する場合は、毎回v.begin()からイテレータを取得し直すのが安全です。
  • 特定の値を持つ要素をまとめて削除したい場合は、std::removeerase()を組み合わせた「erase–removeイディオム」や、C++20で追加されたstd::erase() / std::erase_if()を使うと、より簡潔に記述できます。
  1. 【Python】pop()メソッドでセットから要素を削除する方法

    「集合(セット)」という言葉は、数学の分野でおなじみの概念です。Pythonにおけるセット(set)は、数学の集合に相当するデータ構造で、さまざまな要素を格納することができます。セット内の要素には順序が定義されておらず、要素の追加や削除、セット全体の反復処理のほか、和集合・積集合・差集合といった標準的な集合演算も行えます。 本記事では、セットから要素を削除する方法を解説します。ここでは pop() メソッドを使用します。pop() はPythonの組み込みメソッドで、セットから要素を1つずつ取り出して削除するために使われます。なお、セットは順序を持たないデータ構造のため、どの要素が削除されるか

  2. 【Python】セットから要素を削除するプログラム:pop()メソッドの使い方

    「集合(セット)」という言葉は、数学の世界でもおなじみですね。Pythonにおけるセットは、数学の集合に相当するデータ構造です。セットにはさまざまな要素を格納でき、要素の順序は定義されません(順序を持たないコレクションです)。セットでは要素の追加や削除が自由に行え、要素の反復処理のほか、和集合・積集合・差集合といった標準的な集合演算も実行できます。この記事では、セットから要素を削除する方法を解説します。ここでは pop() メソッドを使用します。pop() はPythonの組み込みメソッドで、セットから要素を1つずつ取り出しながら削除していくために使われます。実行例NEW SET IS ::&