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

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

Linda Hamilton
リリース: 2024-12-24 14:07:16
オリジナル
169 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート