std::remove の機能を理解する
C では、 std::remove アルゴリズムは 2 つの forward で表される任意のシーケンスに対して動作します。イテレータ。その目的は、シーケンス内の要素を再配置し、一致しない要素を前方に移動することです。 std::erase とは異なり、remove はコンテナーから要素を物理的に削除しません。代わりに、それらを再編成します。
例
次のコード スニペットを考えてみましょう:
std::vector<int> a; a.push_back(1); a.push_back(2); std::remove(a.begin(), a.end(), 1); std::vector<int>::iterator iter = a.begin(); std::vector<int>::iterator endIter = a.end(); std::cout << "Using iter...\n"; for (; iter != endIter; ++iter) { std::cout << *iter << "\n"; } std::cout << "Using size...\n"; for (int i = 0; i < a.size(); ++i) { std::cout << a[i] << "\n"; }
出力は次のようになります:
Using iter... 2 2 Using size... 2 2
remove により要素が 2 前方に実質的に移動されましたが、初期化されていないメモリが削除されていないため、ベクトルのサイズは 2 のままです。
Erase-Remove Idiom
消去-削除イディオムは、削除と消去を組み合わせて、不要な要素を物理的に削除します。コード:
a.erase(std::remove(a.begin(), a.end(), 1), a.end());
は、ベクトルから要素 1 を削除し、そのサイズを 1 に縮小します。
std::remove の使用例
remove の主な使用法は消去と削除のイディオムですが、次のような他の状況でも利用できます。
以上がC の std::remove はどのように機能しますか?また、std::remove と std::erase の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。