C 03 では、マップ内の要素を削除すると、その要素を指す反復子が無効になります。ただし、C 11 以降では、erase メソッドは次の反復子を返すため、要素の削除後の安全な反復が可能になります。
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 以降では、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 サイトの他の関連記事を参照してください。