首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个简单的迭代器有关问题

2013-08-01 
一个简单的迭代器问题Iterator[解决办法]push_back后迭代器失效了。可能永远不会到你原先找的end_itr[解决

一个简单的迭代器问题

                                                  Iterator                                               


[解决办法]
push_back后迭代器失效了。可能永远不会到你原先找的end_itr
[解决办法]
因为debug模式下有“越界”检查。
用正规方法使用stl,别瞎试。
[解决办法]
这是个断言错误,这么用本身不会出错,但是这种用法是错误的,所以debug 版会出错。
这是个理论性的错误,就是说,
虽然保留了足够了内存,使用上不会有错;

但是push_back 这个操作,理论上会使iterator 失效,所以end_itr是个失效的iterator ,所以认为这种做法,不符合vector,iterator 设计理念和使用方式,是一种错误的用法,所以调试版绘指出这是个错误;

你这个用法,其实就是一种打擦边球的方式;

假设标准是一种法律的话;
以前(VC6 ,DEVC++),法律执行不严格,就没有判作错误;
现在(vs2008)法律执行严格了,就判作这是一种错误了。

push_back 不是这样用的.


for(int i=0;i<9;i++)
{
    push_back(test[i]);//这种用法,似乎才是对的,因为没有使用iterator,
                   //所以不存在iterator 失效的问题 
}

PS:

vs2008 release 版也是没有问题的。
vs2008 debug 版 强调了,
失效的iterator,不能使用,并且只要有push_back,这种修改容器大小的代码出现,预先保存的iterator就会失效,这确实有点太严格了,不过习惯了的话,可以避免使用失效的iterator,也未必就不对。

热点排行