vector中的元素{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
。
为什么使用下面的方法可以删除vector容器的偶数
for(auto vbegin = va.begin(); vbegin != va.end(); ++vbegin)
{
if(!(*vbegin % 2))
{
va.erase(vbegin);
}
}
而当使用类似的方法删除奇数时会报错代码如下,错误提示:Signal: SIGSEGV (Segmentation fault)
for(auto vbegin = va.begin(); vbegin != va.end(); ++vbegin)
{
if(*vbegin % 2)
{
va.erase(vbegin);
}
}
樓上的方案將迭代器賦值給begin()是可以達到效果的,但是每次都會重頭開始遍歷,降低了效率。而另一個複製迭代器會遇到越界的問題。
這是我的方案:
C++ 的迭代器在刪除(erase)之後就失效了,
所以在
va.erase(vbegin);
執行後++vbegin
的效果是未知的。建議在if區塊內定義一個暫時的迭代器用來刪除容器元素
兩種都錯了,因為erase呼叫之後迭代器會失效,你需要
查資料,去弄清楚erase咋回事