C++:erase删除容器中元素

#include<iostream>#include<vector>usingnamespacestd;intmain(){vector<int>vec;vector<i... #include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec;
vector<int>::iterator iter;
for ( int i = 0; i < 10; i++ )
{
vec.push_back( i );
}
for ( iter = vec.begin(); iter != vec.end(); )
{
if ( *iter == 3 )
{
vec.erase( iter );
}
else
{
++iter;
}
}
cout << "剩余元素:" << endl;
for ( iter = vec.begin(); iter != vec.end(); ++iter )
{
cout << *iter << " ";
}
cout << endl;

return 0;
}

这段程序很简单:
原来存的是 0 1 2 3 4 5 6 7 8 9
剩余元素是 0 1 2 4 5 6 7 8 9
但是索引3的位置的值并没有被删除 而只是变成4了啊
也就是删除之后这10个空间的值分别是 0 1 2 4 4 5 6 7 8 9 这样算删除了么?
是不是这样用迭代器访问不到了 但是按索引访问还是能访问到呢?
展开
 我来答
网虫00
2012-11-06 · TA获得超过144个赞
知道小有建树答主
回答量:123
采纳率:0%
帮助的人:101万
展开全部
这地方改一下:
if ( *iter == 3 )
{
iter = vec.erase( iter );
}
或者
if ( *iter == 3 )
{
vec.erase( iter );
break;

}
iter原先指向3这个元素,使用erase之后,这个迭代器失效了,所以在下次循环else这个语句块内,
++iter是非法的。
夜来雨早来晴
2015-11-17 · TA获得超过3.1万个赞
知道大有可为答主
回答量:9110
采纳率:60%
帮助的人:820万
展开全部
erase()函数的功能是用来删除容器中的元素。
函数原型:
iterator erase(iterator where);
iterator erase(iterator first,iterator last);
basic_string& erase(size_type p0=0,size_type n=np);
删除某个容器里的某个元素:c.erase(T);
链表容器以list为例,执行container.erase(it)。
list<int>::iterator it;
for (it = lt.begin(); it != lt.end(); ) {
if (*it % 2 == 0)
lt.erase(it++);
else
++it;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式