| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1091 人关注过本帖, 1 人收藏
标题:vector 的erase问题
取消只看楼主 加入收藏
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
结帖率:87.93%
收藏(1)
已结贴  问题点数:20 回复次数:3 
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
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
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
SORRY 结果就是我想象的那样 是我自己绕进去了 另外 在此情况下 使用erase的话 嘿嘿 有兴趣的可以试下
2010-04-27 14:00
快速回复:vector 的erase问题
数据加载中...
 
   



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

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