打印

赋值问题

[复制链接]
1122|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yybj|  楼主 | 2012-4-21 19:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在vector容器中,删除元素会使迭代器失效,要对迭代器重新赋值
是这条语句吗?
for (vector<int>::iterator vit = ivec.begin();vit != ivec.end();++vit)
在进行删除操作时,ivec.begin()和ivec.end()变化了没?
上面for语句中的赋值操作只执行一次还是每循环一次都执行一次吗?
那语句
for(int i = 0;i < 10;++i)中赋值应该是只是在第一次执行吧
那么对删除操作的vector迭代器重新赋值是什么语句?
看书没看懂,求指教

相关帖子

沙发
txcy| | 2012-4-21 19:52 | 只看该作者
如果被删除的是第一个元素,那ivec.begin()就会发生改变。不管被删除的是哪个,ivec.end()都是要发生变化的。那个赋值操作只会执行一次,就是在最开始的是后那一次。以后不会再被执行了。vit=ivec.erase(vit); 这样就可以把vit所指向位置的元素删掉,同时将vit指向下一个位置。

使用特权

评论回复
板凳
火箭球迷| | 2012-4-21 20:04 | 只看该作者
对于序列式容器(如vector,deque),删除当前的iterator会使后面所有元素的iterator都失效。这是因为vetor,deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。还好erase方法可以返回下一个有效的iterator。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

2496

帖子

1

粉丝