私はここからスワップアンドポップテクニックを使用しています: Erasing element in a vector while iterating using swap-and-pop
以下のコードは、「ベクトル反復子に互換性がありません」というアサーション エラーが発生します。
for(auto iter=vec.begin(); iter!=vec.end();)
{
if((*iter).isAlive())//update the entity if the entity is alive
{
(*iter).update();
++iter;
}
else //otherwise, get rid of it
{
std::swap(*iter, vec.back());
vec.pop_back();
}
}
ただし、std::vector の代わりに std::list を使用すると、すべて正常に動作します。
ベクトルを使用するとアサーション エラーが発生するのはなぜですか?