标题:vector 的erase问题
只看楼主
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
结帖率:87.93%
已结贴  问题点数:20 回复次数:6 
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 编辑 ]
搜索更多相关主题的帖子: 学习 突发奇想 
2010-04-26 11:24
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
得分:0 
无人关注吗
2010-04-26 14:06
boyhailong
Rank: 2
等 级:论坛游民
帖 子:4
专家分:23
注 册:2010-4-23
得分:10 
因为earse是删除二者之间的元素,而iter1,iter2之间没有元素,所以无法删除,
2010-04-26 16:16
boyhailong
Rank: 2
等 级:论坛游民
帖 子:4
专家分:23
注 册:2010-4-23
得分:10 
哦,貌似我说错了,vec.erase(iter1,iter2);  这句是要删除iter1和iter1之间的元素,当然是0个元素,删除失败!!
2010-04-26 16:21
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
得分:0 
以下是引用boyhailong在2010-4-26 16:21:14的发言:

哦,貌似我说错了,vec.erase(iter1,iter2);  这句是要删除iter1和iter1之间的元素,当然是0个元素,删除失败!!
这个我知道 关键是按照理解 删除后的结果是什么样 我理解的和真实的删除后的结果有出入
另外 你没看明白我的问题
2010-04-27 08:09
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
得分:0 

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2010-04-27 13:51
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
得分:0 
SORRY 结果就是我想象的那样 是我自己绕进去了 另外 在此情况下 使用erase的话 嘿嘿 有兴趣的可以试下
2010-04-27 14:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-304427-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.650315 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved