stlコンテナがループループで要素を削除する方法
1266 ワード
実際のアプリケーションでは、コンテナ内の要素を巡回し、特定の条件を判断した後、コンテナから要素を消去するシーンに遭遇します.
上のコードに注意して、it++または++itは、forループヘッダではなく、forループ体内で発生します.削除する場合は、
it++というリロード操作はitを後方に移動させ、現在の反復位置を返します.
上記のコードを実行するとmap,set,listが正しく値を出力し,vecまたはdqueを実行するとeraseを実行した後にitが無効になり,次のループで値の取得に失敗するため断言クラッシュが発生する.
したがって、以上のようなループループで要素を削除し、ループを継続する方法に影響を及ぼさずにリレーショナルコンテナ(map,list,setなど)に使用することができ、線形コンテナ(vector,dequeなど)に問題が発生することに注意してください.
#include
#include
上のコードに注意して、it++または++itは、forループヘッダではなく、forループ体内で発生します.削除する場合は、
t.erase(it++);
it++というリロード操作はitを後方に移動させ、現在の反復位置を返します.
上記のコードを実行するとmap,set,listが正しく値を出力し,vecまたはdqueを実行するとeraseを実行した後にitが無効になり,次のループで値の取得に失敗するため断言クラッシュが発生する.
したがって、以上のようなループループで要素を削除し、ループを継続する方法に影響を及ぼさずにリレーショナルコンテナ(map,list,setなど)に使用することができ、線形コンテナ(vector,dequeなど)に問題が発生することに注意してください.