读书人

for循环语句中赋值有关问题

发布时间: 2012-04-25 19:32:32 作者: rapoo

for循环语句中赋值问题
在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迭代器重新赋值是什么语句?
看书没看懂,求指教
谢谢


[解决办法]
对于序列式容器(如vector,deque),删除当前的iterator会使后面所有元素的iterator都失效。这是因为vetor,deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。还好erase方法可以返回下一个有效的iterator。


[解决办法]
vit=ivec.erase(it);//
[解决办法]
如果被删除的是第一个元素,那ivec.begin()就会发生改变。不管被删除的是哪个,ivec.end()都是要发生变化的。

那个赋值操作只会执行一次,就是在最开始的是后那一次。以后不会再被执行了。

vit=ivec.erase(vit); 这样就可以把vit所指向位置的元素删掉,同时将vit指向下一个位置。

读书人网 >C++

热点推荐