ループでvectorを変更する
vectorの反復器は無効になる可能性があるので、ループでvectorを変更する場合は、反復器の状態をタイムリーに変更することに注意してください.
注意!endが返す反復器を保存しないで!!!
vector<int> vi{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
auto iter = vi.begin();
while (iter != vi.end())
{
if (*iter % 2)
{
iter = vi.insert(iter, *iter);
// , insert , iter , !!!
iter += 2;
}
else
{
iter = vi.erase(iter);
// !!! ,iter !!!
}
}
注意!endが返す反復器を保存しないで!!!