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()を使うのがおすすめです。
-
C++でstd::stringから空白を削除する方法
```html この記事では、C++でstd::stringから空白(スペース)を取り除く方法を解説します。空白の削除には、<algorithm>ヘッダーで提供されるremove()関数を使用します。この関数は、処理対象の範囲の先頭と末尾を指す2つのイテレータと、削除したい値を第3引数として受け取ります。入力:文字列 "This is C++ Programming Language" 出力:文字列 "ThisisC++ProgrammingLanguage"アルゴリズムステップ1:文字列を取得する ステップ2:remove()関数を使って、
-
Deapデータ構造における最小要素の削除方法
はじめに本記事では、Deapデータ構造から最小要素を削除する手法について詳しく解説します。Deap(Double-Ended Heap)は、最小ヒープ(min-heap)と最大ヒープ(max-heap)を1つの完全二分木で実現したデータ構造です。左側の部分木が最小ヒープ、右側の部分木が最大ヒープとして機能するため、最小値と最大値の両方に効率的にアクセスできます。削除操作では、主な目的はDeap内の最小値を取り除くことです。最小値は必ず最小部分木の根(配列のインデックス2の位置)に格納されているため、その位置の要素を取り出すことになります。木の高さは常に log n 程度であるため、削除操作にか