C++ でベクトルから要素を削除
胡金庫
2023年10月12日
-
C++ でベクトルから要素を削除するには
erase()
メソッドを使用する -
std::erase()
メソッドを使用して C++ のベクターから要素を削除 -
C++ で
std::erase()
とstd::remove()
を使用してベクターから要素を削除する
この記事では、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;
著者: 胡金庫