「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 反復中に std::vector から要素を安全に削除するにはどうすればよいですか?

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

2024 年 11 月 14 日公開
ブラウズ:109

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

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

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

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

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

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

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3