zoukankan      html  css  js  c++  java
  • vector删除元素浅析

    <<effectSTL>>书中提到erase-remove方法  即c.rease(remove(c.begin(),c.end(),1963),c.end())

    关于remove这里有一篇文章 http://blog.csdn.net/vbanglev/archive/2007/02/22/1512521.aspx

    -------------------------------------------------------------------------------------------------------------------------------------------------------

    下面开始真正的内容

    上代码

    #include<iostream>
    #include<vector>
    using namespace std;
    int main(){
        vector<int> v;
        v.push_back(1);
        v.push_back(2);
        v.push_back(3);
        v.push_back(4);
        vector<int>::iterator i;
        for(i=v.begin();i!=v.end();i++){
            cout<<*i<<endl;
            
        }
    <img src="//img-blog.csdn.net/20160212210215830?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
        for(i=v.begin();i!=v.end();){
            cout<<*i<<endl;
            if(*i==3){
                i=v.erase(i);//正确写法
                /*v.erase(i); 不推荐的写法但事实上可以,因为vector是连续内存的容器
                  v.erase(i++); 另外一种错误写法,因为vector是连续内存的容器(序列容器),但对于关联容器这种写法
    是对的
                */
            }
            else
                i++;
        }
    <img src="//img-blog.csdn.net/20160212210756009?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
        for(i=v.begin();i!=v.end();i++){
            cout<<*i<<endl;
            
        }
        return 0;
    }
    vector的erase函数返回的迭代器并没有向后增加(原地踏步),事实上erase函数将要删除的元素之后的迭代器整体向前迁移以达到删除效果(end()也被迁移) 这也可以解释为什么在 i 没有被erase函数的返回值赋值的情况下程序依旧可以运行

    对于关联容器则没有上面的特性


  • 相关阅读:
    DDD实战2 创建领域基础类库项目
    DDD实战1
    MVC中 跳转出某一个Area的方法
    在codefirst迁移的时候 为新增的属性添加一个默认值
    在.net MVC项目中使用ajax进行数据验证
    将枚举转成SelectListItem
    在.net MVC项目的区域中使用模板页
    在MVC项目中分页使用MvcPager插件
    通过控制台查看电脑中.net framework的版本
    全面了解浏览器(内核)发展史
  • 原文地址:https://www.cnblogs.com/odin-luyu/p/5371773.html
Copyright © 2011-2022 走看看