ホームページ  >  記事  >  バックエンド開発  >  反復中に std::vector から要素を安全に削除するにはどうすればよいですか?

反復中に std::vector から要素を安全に削除するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 02:52:30437ブラウズ

How to Safely Remove Elements from a std::vector While Iterating?

反復中に std::vector から要素を効果的に削除する

C プログラミングの領域では、開発者は std::vector を操作するという課題に遭遇することがよくあります。 ::vector の要素を走査します。イテレーターはこのタスクに便利なメカニズムを提供しますが、反復中に要素を削除しようとするときによくある落とし穴が発生します。

std::vector<:string> が使用されるシナリオを考えてみましょう。ファイルへのパスのリストを保存するために使用されます。目標は、各ファイルを削除し、ベクターからそのパスを削除することです。ただし、erase() メソッドなどの従来のメソッドを使用すると、削除のたびに反復子が無効になり、さらなるトラバーサルが複雑になります。

この制限を克服するために、開発者はより効率的なアプローチを考案しました。 Erase() メソッドが呼び出されると、指定された要素が削除されるだけでなく、次の要素を指す新しい反復子も返されます。この独自の動作により、ループのスムーズな継続が可能になります。

<code class="cpp">std::vector<std::string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
    if (::DeleteFile(iter->c_str()))
        iter = m_vPaths.erase(iter);
    else
        ++iter;
}</code>

このコード スニペットでは、ループは意図どおりに継続し、削除のたびに次の有効な要素を指すように iter が自動的に更新されます。この効率的な方法により、追加のベクトルの必要性がなくなり、反復中に要素を削除するプロセスが合理化されます。

以上が反復中に std::vector から要素を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。