C std::List
C では、 std::list は二重リンクされたリスト データを提供するコンテナーです。構造。リストを反復処理する際、特定の条件に基づいて要素を削除することが必要になる場合があります。この問題は、反復ループ内で項目を直接削除すると、「リスト反復子はインクリメントできません」エラーが発生する場合に発生します。
この問題を解決するには、前の要素を削除する前に、まず反復子 (i ) をインクリメントすることが重要です。これは、次のように while ループを利用することで実現できます。
std::list<item*>::iterator i = items.begin(); while (i != items.end()) { bool isActive = (*i)->update(); if (!isActive) { items.erase(i++); // alternatively, i = items.erase(i); } else { other_code_involving(*i); ++i; } }
この改訂されたコードでは、反復子 i がループ内でインクリメントされ、 items.erase(i ) 操作で前の要素を正常に削除できるようになります。 。あるいは、同じ効果を得るために i を i = items.erase(i) に置き換えることもできます。
このアプローチを実装すると、目的の条件を満たすとすぐに項目を効率的に削除でき、追加のパスが不要になります。リストを通して。
以上が反復中に C std::list から要素を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。