c++ vector容器通过迭代器删除元素中奇数问题
本文介绍了c++ vector容器通过迭代器删除元素中奇数问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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()是可以达到效果的,但是每次都会重头开始遍历,降低了效率。而另一个复制迭代器会遇到越界的问题。
这是我的方案:
{
std::vector<int> vec = {1,2,3,4,5,6,7,8,9};
auto itr = vec.begin();
while (itr != vec.end()) {
if (*itr % 2) {
itr = vec.erase(itr);
} else {
itr++;
}
}//done
}
这篇关于c++ vector容器通过迭代器删除元素中奇数问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文