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函数的返回值赋值的情况下程序依旧可以运行

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


  • 相关阅读:
    hdu 5387 Clock (模拟)
    CodeForces 300B Coach (并查集)
    hdu 3342 Legal or Not(拓扑排序)
    hdu 3853 LOOPS(概率DP)
    hdu 3076 ssworld VS DDD(概率dp)
    csu 1120 病毒(LICS 最长公共上升子序列)
    csu 1110 RMQ with Shifts (线段树单点更新)
    poj 1458 Common Subsequence(最大公共子序列)
    poj 2456 Aggressive cows (二分)
    HDU 1869 六度分离(floyd)
  • 原文地址:https://www.cnblogs.com/odin-luyu/p/5371773.html
Copyright © 2011-2022 走看看