ホームページ > バックエンド開発 > C++ > C で反復中にマップ要素を消去するとどうなりますか?

C で反復中にマップ要素を消去するとどうなりますか?

Patricia Arquette
リリース: 2024-12-16 15:24:11
オリジナル
291 人が閲覧しました

What Happens When Erasing a Map Element During Iteration in C  ?

最初から最後まで反復中にマップ要素で Erase() を呼び出すとどうなりますか?

C 03 では、マップ内の要素を削除すると、その要素を指す反復子が無効になります。ただし、C 11 以降では、erase メソッドは次の反復子を返すため、要素の削除後の安全な反復が可能になります。

C の解決策 03

In C 03、マップから要素を削除した後の安全な反復を確保するには、map::erase() によって返された反復子を使用するようにコードを更新し、 Erase() を呼び出した後のイテレータのポストインクリメント。

map<string, SerialdMsg::SerialFunction_t>::iterator pm_it = port_map.begin();</p>while(pm_it != port_map.end())<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if (pm_it->second == delete_this_id)
{
    port_map.erase(pm_it++);  // Use iterator.
                              // Note the post increment.
                              // Increments the iterator but returns the
                              // original value for use by erase 
}
else
{
    ++pm_it;           // Can use pre-increment in this case
                       // To make sure you have the efficient version
}
ログイン後にコピー
{


}

C 11 以降のソリューション

C 11 以降では、erase() は次のデータを返します。イテレータを使用すると、次の構文を使用して要素の反復と削除を同時に安全に行うことができます:

<br>auto pm_it = port_map.begin();</p>while(pm_it != port_map.end())<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if (pm_it->second == delete_this_id)
{
    pm_it = port_map.erase(pm_it);
}
else
{
    ++pm_it;
}
ログイン後にコピー
{


}

以上がC で反復中にマップ要素を消去するとどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
前の記事:CAS のみを使用して C 11 に ABA カウンターを実装するにはどうすればよいですか? 次の記事:C でカプセル化に「friend」キーワードを使用する必要があるのはどのような場合ですか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート