vector 的erase问题
学习erase的erase(b,e)操作时突发奇想若b,e的位置不是按照标准的b前e后而是按照e前b后调用呢
代码如下
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vector<int>::iterator iter1,iter2=vec.begin();
iter1=iter2+3;
cout<<vec.begin()<<endl;
vec.erase(iter1,iter2);
cout<<vec.begin()<<endl;
vector<int>::iterator iterTmp=vec.begin();
while(iterTmp!=vec.end())
{
cout<<*iterTmp<<endl;
++iterTmp;
}
查看了下erase的原代码
iterator erase(iterator _F, iterator _L)
{iterator _S = copy(_L, end(), _F);
_Destroy(_S, end());
_Last = _S;
return (_F); }
实际上就是将后一个跌代器到end()之间的数据Copy到前面后回收掉多余的空闲内存
查看了下begin()的结果在erase前后都无变化,按照理解应该进行的操作是
操作前:1 2 3 4 5
↑ ↑
begin() end()
操作后:1 2 3 1 2 3 4 5
↑ ↑
begin() end()
但查看begin到end之间的结果仍然是1、2、3、4、5 不知道是为什么
[ 本帖最后由 happynight 于 2010-4-27 08:06 编辑 ]