std erase执行后iterator的效果

 

vector、list、map三个容器在执行erase的效果:

在vs2005中vector在执行erase后,在erase参数中的_it所指向的位置开始,一直到后面,所有的_iterator无效,但之前的还是有效的.比如下面代码

vector<int> vint;
 vint.push_back(1);
 vint.push_back(2);
 vint.push_back(3);
 vint.push_back(4);
 vector<int>::iterator _itv = vint.begin();
 vector<int>::iterator _itv2 = ++_itv;

 vector<int>::iterator _itv3 = ++_itv;

 _itv = vint.begin();
 vint.erase(_itv2);  //执行后,_itv2前面的_itv有效,但后面_itv3崩溃,_itv2本身也是无效的
 int yv = *_itv;
 int yv3 = *_itv3; //vs2005执行崩溃,但在vc6.0中还是可以的,vs2005自带的stl增加了自己的容错机制

 

list、map容器在执行erase后,只有参数指向的_iterator的对象无效,其它的无论是后面位置还是前面位置的_iterator都是有效的

list<int> lint;
 lint.push_back(1);
 lint.push_back(2);
 lint.push_back(3);
 lint.push_back(4);
 list<int>::iterator _itl = lint.begin();
 list<int>::iterator _itl2 = ++_itl;
 list<int>::iterator _itl3 = ++_itl;

 _itl = lint.begin();
 lint.erase(_itl2);
 int yl = *_itl;              //访问有效
 int yl2 = *(++_itl3);    //访问有效

 

在对容器操作erase是,尽量使用erase的返回值

_itl2 = lint.erase(_itl2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值