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

反復中に C マップから項目を安全に削除するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-11 00:38:09
オリジナル
404 人が閲覧しました

How to Safely Remove Items from a C   Map During Iteration?

C での反復中にマップから項目を削除する

マップを反復処理し、特定の条件に基づいて項目を削除しようとすると、次のようになります。反復子に対する要素の消去の影響を考慮することが重要です。マップの反復中に要素を消去すると反復子が無効になり、反復プロセスの続行が困難になります。

連想コンテナの標準消去イディオム

の標準イディオム反復中に連想コンテナ (マップなど) から消去する場合は次のようになります。

for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */)
{
  if (must_delete)
  {
    m.erase(it++);    // or "it = m.erase(it)" since C++11
  }
  else
  {
    ++it;
  }
}
ログイン後にコピー

説明

  • ループ条件のホイスト解除: これにより、ループがマップの終わりを確実にチェックします。
  • 削除でイテレータをインクリメントしないcase: 要素が削除されると、反復子はマップ内の次の要素を指します。これは、ループが消去後にイテレータをインクリメントしてはならないことを意味します。
  • Const イテレータ: C 11 より前では、const イテレータは消去できませんでした。この場合、従来の反復子 (std::map::iterator など) を使用する必要があります。

このイディオムに従うことで、マップからアイテムを安全に削除できます。イテレータを無効にせずに繰り返します。

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

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