• vector容量器的应用


    vector容器的应用,感觉最近做的题目还用的挺多

    vector与常用数组大部分是相同的,可以进行插入,删除之类的,但是,有些题目,用普通的数组就很容易爆掉,而vector可以动态的根据你所需要的来调整大小。

    所以说vector向量不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单,高效的容易,完全可以代替数组。

    比如   一维数组  vector <int > v;

         二维数组  vector <int *> v;

         三维数组  vector <int **> v;

    一些基本用语

    erase              删除

    insert              插入

    begin              指向头指针

    end                 指向尾元素+1的尾部位置

    empty             判断是否为空

    push_back     向容器尾部加入新的数字

    pop_back       去掉容器最后一个数字

    clear               清空整个容器

    size                表示容器所包含的数字

    首先最基本的,对于正常的容器进行最基本的插入数据方法

    #include<vector>
    using namespace std;
    int main()
    {
        vector<int> v;
        v.push_back(2);
        v.push_back(7);
        v.push_back(9);
        return 0;
    }

    还有另一种,直接用下标定义的   注意这个v(3) 与普通数组一样,是从0开始计数的,3代表大小。

    vector <int > v(3);
    v[0]=2;
    v[1]=7;
    v[2]=9;

    接着,接触到了一种新东西,迭代器

    具体什么原理也还没太清楚,但是大概知道,不论是vector还是string都可以用这种迭代器来表示长度之类的。

    #include<vector>
    #include<iostream >
    using namespace std;
    int main()
    {
        vector<int> v(3);
        v[0]=2;
        v[1]=7;
        v[2]=9;
        vector<int> :: iterator it;  ///定义了一个迭代器变量
        for(it=v.begin();it!=v.end();it++)  
        ////从容器的首位开始便利到结束
        {
            cout<<*it<<" ";
        }
        cout<<endl;
        return 0;
    }

    接下来是元素的插入方法,用到了insert()

    其可以再vector 对象的任意位置前插入一个新的元素,同时,vector 会自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置

    要注意的是,insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。

    #include<vector>
    #include<iostream>
    using namespace std;
    int main()
    {    
        vector<int> v(3);
        v[0]=2;
        v[1]=7;
        v[2]=9;
        v.insert(v.begin(),8); ////在最前面插入新元素,元素值为8。
        v.insert(v.begin()+2,1); ////在第2个元素前插入新元素1。
        v.insert(v.end(),3); ///在向量末尾追加新元素3。
        vector<int> :: iterator it;
        for(it=v.begin();it!=v.end();it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
        return 0;
    }

    这组数据的输出结果是 8 ,2 ,1 ,7 ,9 ,3;2

    元素的删除方法,用到了erase()或者clear()

    erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素

    clear()方法则是一次性删除vector中的所有元素

    代码如下

    #include<vector>
    #include<iostream>
    using namespace std;
    int main()
    {
        vector<int> v(10);
        for(int i=0;i<10;i++)
        v[i]=i;
        v.erase(v.begin()+2);  ///删除 2 个元素,从0开始计数
        vector<int> :: iterator it;
        for(it=v.begin();it!=v.end();it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
        v.erase(v.begin()+1,v.begin()+5); 
        ///删除迭代器中第1 到第 5 区间的所有元素  (删除1 2 3 4 这4个)
        for(it=v.begin();it!=v.end();it++)
        {
            cout<<*it<<" ";
        }
        cout<<endl;
        v.clear();
        cout<<v.size()<<endl;
        return 0;
    }

    运行结果是

    0 1 3 4 5 6 7 8 9

    0 6 7 8 9

    0

    使用reverser反向排列算法

    在头文件algorithm下,代码如下

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    int main()
    {
        vector<int> v(10);
        for(int i=0;i<10;i++)
        {
            v[i]=i;
        }
        reverse(v.begin(),v.end());/// 反向排列向量的从首到尾间的元素 
        vector<int> :: iterator it;
        for(it=v.begin();it!=v.end();it++)
        {
            cout<<*it<<" ";
            
        }
        cout<<endl;
        return 0;
    }

    输出结果是

    9 8 7 6 5 4 3 2 1 0

    使用sort算法对向量元素排序

    sort默认为升序排列的,位于algorithm头文件下

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    int main(int argc,char argv[])
    {
        vector<int> v;
        int i;
        for(i=0;i<10;i++)
        {
            v.push_back(9-i);
        }
        for(i=0;i<10;i++)
        {
            cout<<v[i]<<" ";
        }
        cout<<endl;
        sort(v.begin(),v.end());   //////升序排列 
        for(i=0;i<10;i++)
        {
            cout<<v[i]<<" ";
        }
        cout<<endl;
        return 0;
    } 

    输出结果

    9 8 7 6 5 4 3 2 1 0

    0 1 2 3 4 5 6 7 8 9

    但是,可以自己设计比较函数,然后把函数指定给sort算法,sort就按照自己所规定的规则进行排列。

    例如自己设计一个比较函数Comp,对元素从大到小排序

    #include<vector>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    bool Comp(const int &a,const int &b)
    {
        if(a!=b) return a>b;
        else return a>b;
    }   /////降序排列 
     
    int main(int argc,char *argv[])
    {
        vector<int> v;
        for(int i=0;i<10;i++)
        {
            v.push_back(i);
            
        }
        for(int i=0;i<10;i++)
        {
            cout<<v[i]<<" ";
        }
        cout<<endl;
        sort(v.begin(),v.end(),Comp);   按照Comp 函数比较规则排序 
        for(int i=0;i<10;i++)
        {
            cout<<v[i]<<" ";
        }
        cout<<endl;
        return 0;
    }

    输出结果

    0 1 2 3 4 5 6 7 8 9

    9 8 7 6 5 4 3 2 1 0

    向量容器大小的统计

    使用size() 可以返回容器大小,即元素的个数

    使用empty() 可以判断容器是否为空   如果为空则返回逻辑真实值 1 ,如果为非空则返回逻辑假 0。

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    int main()
    {
        vector<int> v(10);
        for(int i=0;i<10;i++)
        {
            v[i]=i;
        }
        cout<<v.size()<<endl;   ///输出向量的大小,即包含了多少个元素 
        cout<<v.empty()<<endl;  ///如果为空则输出 1 ,如果非空则输出 0 
        v.clear();
        cout<<v.empty()<<endl;
        return 0;
    }

    输出结果

    10

    0

    1

    以上大概就是vector的通常用法了。

  • 相关阅读:
    岁月
    唯美励志古风
    活着
    走进华夏统一
    使用Fiddler测试WebApi接口
    深入了解正则表达式
    Linux 学习_ssh(secure shell)
    PHP使用mysql扩展操作数据库
    给自己的网站加点情趣,常用的javaScript效果
    三层架构的基础知识
  • 原文地址:https://www.cnblogs.com/wushengyang/p/9350788.html
Copyright © 2020-2023  润新知