返回信息流vector<int> array;
array.push_back(1);
array.push_back(2);
array.push_back(1);
array.push_back(2);
for (vector::iterator iter=array.begin(); iter!=array.end(); ++iter){
if(2==*iter) array.erase(iter);
} 这个可以把第二个array.push_back(2);去除掉吧
这是一条镜像帖。来源:北邮人论坛 / cpp / #13505同步于 2008/10/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
vector
duty
2008/10/5镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
erase以后的迭代器会失效么?忘记了。。
【 在 duty (duty) 的大作中提到: 】
vector<int> array;
array.push_back(1);
array.push_back(2);
array.push_back(1);
array.push_back(2);
for (vector::iterator iter=array.begin(); iter!=array.end(); ++iter){
if(2==*iter) array.erase(iter);
} 这个可以把第二个array.push_back(2);去除掉吧
【 在 Nathan 的大作中提到: 】
: erase以后的迭代器会失效么?忘记了。。
: vector<int> array;
: array.push_back(1);
: ...................
恩,不要在用迭代器遍历的过程中erase或者push_back,push之类的。这个可是惨痛的教训,昨天在程序中用了个map,就是在遍历过程中erase了,害我调了半天
for (vector<int>::iterator iter=array.begin(); iter!=array.end(); ++iter){ //lz有个基本语法错误哦
if(2==*iter) {iter = array.erase(iter); //这样迭代器就不会失效了
iter--;} //返回的是指向删除位置后面元素的迭代器,所以要自减
}
赞
The erase() function either deletes the element at location loc, or deletes the elements between start and end (including start but not including end). The return value is the element after the last element erased.
【 在 calmsea 的大作中提到: 】
: for (vector<int>::iterator iter=array.begin(); iter!=array.end(); ++iter){ //lz有个基本语法错误哦
: if(2==*iter) {iter = array.erase(iter); //这样迭代器就不会失效了
: iter--;} //返回的是指向删除位置后面元素的迭代器,所以要自减
: ...................
效率,效率问题。
往头上插一个,需要把所有vector里面元素往后推,O(N)
用deque,是两个头碰头的vector放在一起,插在头上相当于插在其中一个vector的尾部,O(1)。
【 在 FadeToBlack 的大作中提到: 】
: at(0)不就行了?