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

C++のstd::vectorからインデックスを指定して要素を削除する方法

C++のstd::vectorから、インデックスを指定して要素を削除するには、erase()メンバ関数を使用します。erase()は削除したい位置をイテレータで受け取るため、begin()と組み合わせて使うのが基本の方法です。

基本的な使い方

まずは、先頭の要素(v[0])を削除するシンプルな例を見てみましょう。

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v; // ベクタを宣言

    // 要素を挿入
    v.push_back(-10);
    v.push_back(7);
    v.push_back(6);

    // 先頭の要素(v[0])を削除
    v.erase(v.begin());

    for (int i = 0; i < v.size(); i++)
        cout << v[i] << " ";
}

出力結果

7 6

この例では、最初に-10、7、6の3つの要素を持つベクタを作成し、v.erase(v.begin())によって先頭の-10を削除しています。その結果、残りの「7 6」が出力されます。

任意のインデックスの要素を削除する

先頭以外の任意の位置にある要素を削除したい場合は、v.begin() + インデックスのようにイテレータを進めて指定します。

// 2番目の要素(v[1])を削除する場合
v.erase(v.begin() + 1);

たとえば上記のコードを先ほどのベクタに適用すると、「7」が削除され、ベクタの内容は「6」となります。

使用時の注意点

  • イテレータの無効化: erase()を実行すると、削除された位置以降のイテレータは無効になります。ループ処理中に要素を削除する場合は、戻り値として返される新しい有効なイテレータを受け取るようにしましょう。
  • 計算量: erase()はO(n)の計算量を持ちます。削除後に後続の要素がすべて前に詰められるためです。
  • 末尾の削除: 最後の要素だけを削除するのであれば、より効率的なpop_back()を使うのがおすすめです。
  1. C++でstd::stringから空白を削除する方法

    ```html この記事では、C++でstd::stringから空白(スペース)を取り除く方法を解説します。空白の削除には、<algorithm>ヘッダーで提供されるremove()関数を使用します。この関数は、処理対象の範囲の先頭と末尾を指す2つのイテレータと、削除したい値を第3引数として受け取ります。入力:文字列 "This is C++ Programming Language" 出力:文字列 "ThisisC++ProgrammingLanguage"アルゴリズムステップ1:文字列を取得する ステップ2:remove()関数を使って、

  2. Deapデータ構造における最小要素の削除方法

    はじめに本記事では、Deapデータ構造から最小要素を削除する手法について詳しく解説します。Deap(Double-Ended Heap)は、最小ヒープ(min-heap)と最大ヒープ(max-heap)を1つの完全二分木で実現したデータ構造です。左側の部分木が最小ヒープ、右側の部分木が最大ヒープとして機能するため、最小値と最大値の両方に効率的にアクセスできます。削除操作では、主な目的はDeap内の最小値を取り除くことです。最小値は必ず最小部分木の根(配列のインデックス2の位置)に格納されているため、その位置の要素を取り出すことになります。木の高さは常に log n 程度であるため、削除操作にか