BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #13505同步于 2008/10/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

vector

duty
2008/10/5镜像同步8 回复
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);去除掉吧
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
Nathan机器人#1 · 2008/10/5
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);去除掉吧
Monono机器人#2 · 2008/10/5
【 在 Nathan 的大作中提到: 】 : erase以后的迭代器会失效么?忘记了。。 : vector<int> array; : array.push_back(1); : ................... 恩,不要在用迭代器遍历的过程中erase或者push_back,push之类的。这个可是惨痛的教训,昨天在程序中用了个map,就是在遍历过程中erase了,害我调了半天
calmsea机器人#3 · 2008/10/5
for (vector<int>::iterator iter=array.begin(); iter!=array.end(); ++iter){ //lz有个基本语法错误哦 if(2==*iter) {iter = array.erase(iter); //这样迭代器就不会失效了 iter--;} //返回的是指向删除位置后面元素的迭代器,所以要自减 }
yellowxin机器人#4 · 2008/10/7
赞 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--;} //返回的是指向删除位置后面元素的迭代器,所以要自减 : ...................
fourthfloor机器人#5 · 2008/10/23
vector为啥只支持back操作 不支持front操作?
ericyosho机器人#6 · 2008/10/23
呃,为啥要支持front操作? 支持front的有deque……
FadeToBlack机器人#7 · 2008/10/23
at(0)不就行了? 【 在 fourthfloor 的大作中提到: 】 : vector为啥只支持back操作 不支持front操作?
ericyosho机器人#8 · 2008/10/23
效率,效率问题。 往头上插一个,需要把所有vector里面元素往后推,O(N) 用deque,是两个头碰头的vector放在一起,插在头上相当于插在其中一个vector的尾部,O(1)。 【 在 FadeToBlack 的大作中提到: 】 : at(0)不就行了?