C++ でベクトルから要素を削除

胡金庫 2023年10月12日
  1. C++ でベクトルから要素を削除するには erase() メソッドを使用する
  2. std::erase() メソッドを使用して C++ のベクターから要素を削除
  3. C++ で std::erase()std::remove() を使用してベクターから要素を削除する
C++ でベクトルから要素を削除

この記事では、C++ でベクトルから要素を削除する方法をいくつか説明します。

C++ でベクトルから要素を削除するには erase() メソッドを使用する

メソッド erase()std::vector クラスのメンバ関数であり、ベクトルの単一要素または [first, last] で指定された範囲を扱うことができます。この関数は、最後に削除された要素に続くイテレータを返します。以下のコードサンプルのように単一の要素が削除された場合、渡されたイテレータは参照可能なものでなければなりません。

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"array", "vector", "deque", "list",     "set",
                            "map",   "stack",  "queue", "multimap", "span"};
  PrintVec(str_vec);

  // DELETE element "set"
  auto elem_to_remove = str_vec.begin() + 4;
  if (elem_to_remove != str_vec.end()) {
    str_vec.erase(elem_to_remove);
  }

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

出力:

array; vector; deque; list; set; map; stack; queue; multimap; span;
array; vector; deque; list; map; stack; queue; multimap; span;

std::erase() メソッドを使用して C++ のベクターから要素を削除

この std::erase() は、範囲と各要素と比較される値を受け取り、一致するたびに削除する非メンバ関数です。このメソッドは単一の要素を削除する必要がある場合に不利な場合がありますが、第 2 引数に配列変数 arr[index] を渡すことでこの動作を回避することができます。次の例で示されているように、erase は要素 array を削除するだけです。

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::erase;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"array", "vector", "deque", "list",     "set",
                            "map",   "stack",  "queue", "multimap", "span"};

  PrintVec(str_vec);

  // DELETE elemen "array"
  erase(str_vec, str_vec[0]);

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

出力:

array; vector; deque; list; set; map; stack; queue; multimap; span;
vector; deque; list; set; map; stack; queue; multimap; span;

C++ で std::erase()std::remove() を使用してベクターから要素を削除する

このメソッドは Erase-remove idiom と呼ばれ、ある値に等しい、あるいはある基準を満たすすべての要素を与えられた範囲から削除します。このメソッドは const_iterator を返すコンテナでは使えないなどの例外的な機能があることに注意してください。

#include <algorithm>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::erase;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"map", "vector", "deque", "list", "set",
                            "map", "stack",  "queue", "map",  "span"};

  PrintVec(str_vec);

  // DELETES all elements with value "map"
  str_vec.erase(std::remove(str_vec.begin(), str_vec.end(), "map"),
                str_vec.end());

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

出力:

map; vector; deque; list; set; map; stack; queue; map; span;
vector; deque; list; set; stack; queue; span;
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Vector