反復中にマップから要素を削除する
C では、erase を使用するため、要素を削除しながら標準ライブラリ マップを反復処理するのは困難な場合があります。 () は反復子を無効にします。ただし、この問題に対処するために広く受け入れられている慣用句があります:
for(auto it = m.begin(); it != m.cend() /* not hoisted */; /* no increment */) { if(must_delete) { auto next = it; it = m.erase(it); // or "it = m.erase(it)" since C++11 } else { ++it; } }
この慣用句の仕組みは次のとおりです:
C 11 より前の構文:
C 11 より前では、const イテレータを消去するにはわずかな処理が必要でした。違う構文:
for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }
定数性と削除:
マップからの要素の削除は、ポインターの削除と同様に、要素の定数性に違反しません。絶え間ない。定数性は主に、値の有効期間ではなく、値を変更する能力を制限します。
以上が反復中に C マップから要素を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。