ホームページ > バックエンド開発 > C++ > C での反復中にマップ要素を削除するとどのような影響がありますか?

C での反復中にマップ要素を削除するとどのような影響がありますか?

Susan Sarandon
リリース: 2024-12-15 06:52:13
オリジナル
681 人が閲覧しました

What are the Implications of Removing Map Elements While Iterating in C  ?

C での反復中にマップ要素を消去した結果

C では、マップを反復処理して要素を消去すると懸念が生じる可能性がありますイテレータの有効性について。動作は使用する C バージョンに応じて異なります。

C 11 以降

C 11 では、イテレータを返すように Erase() メソッドが強化されました。後続の要素へ。これによりプロセスが簡略化されます。

auto pm_it = port_map.begin();
while(pm_it != port_map.end()) {
    if (pm_it->second == delete_this_id) {
        pm_it = port_map.erase(pm_it);
    } else {
        ++pm_it;
    }
}</p>
<p><h3>C 03</h3></p>
<p>C 03 では、マップから要素を削除してもイテレータは自動的に無効になりません。ただし、削除された要素を指すイテレータは無効になります。イテレータの有効性を維持するには、コードを更新する必要があります。</p>
<pre class="brush:php;toolbar:false">map<string, SerialdMsg::SerialFunction_t>::iterator pm_it = port_map.begin();
while(pm_it != port_map.end()) {
    if (pm_it->second == delete_this_id) {
        port_map.erase(pm_it++); // Use iterator. Note the post increment
    } else {
        ++pm_it;
    }
}
ログイン後にコピー

ここでは、返されたイテレータが正しい要素を指すようにするために、erase() 呼び出しで後置インクリメント演算子 ( ) が使用されています。

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

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