C では、マップを反復処理して要素を消去すると懸念が生じる可能性がありますイテレータの有効性について。動作は使用する C バージョンに応じて異なります。
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 サイトの他の関連記事を参照してください。