• C++ vector容器


    向量vector是一个封装了动态大小数组的顺序容器sequence container。和任意其他类型一样,能够存放各种类型的对象。可以简单认为vector就是一个任意存放类型的动态数组。


    容器特征

    1. 顺序序列:顺序容器的元素按照严格的线性顺序排序,可以通过元素在序列的位置访问对应的元素。
    2. 动态数组:支持对序列的任意元素进行快速直接访问,甚至可以通过指针进行操作。这也提供了在序列末尾相对快速增添元素的操作。
    3. allocator-aware能够感知内存分配器的:容器使用了一个内存分配对象来动态处理存储请求。

    基本函数实现

    大致分为:构造函数、增加函数、删除函数、遍历函数、判定函数、大小函数,以及其他函数;具体参考Cpp手册:
    vector

    • push_back 在数组的最后添加一个数值。
    • pop_back 删掉数组的最后一个数据。
    • at 得到编号位置index的数据。
    • begin 得到数组的头指针。
    • end 得到数组的最后一个单元 + 1的指针。
    • front 得到数组头部的引用
    • back 得到数组的最后一个单元的引用。
    • max_size 得到vector最大容量。
    • capacity 得到vector分配的大小。
    • size 当前使用数据的大小。
    • resize 改变当前使用的数据大小,若比当前使用的要大,则填充默认数值。
    • reserve 改变当前vector所分配空间的大小。
    • erase 删除指针指向的数据项。
    • clear 清空了当前的vector。
    • rbegin 把vector反转之后的开始指针返回,就是原数组的end - 1。
    • rend 把vector反转之后的结束指针返回,就是原数组的begin -1。
    • empty 判定vector是否空?
    • swap 与另一个vector交换数据。

    简要介绍

    1. vector<类型> 标识符。
    2. vector<类型> 标识符(max Size)。
    3. vector<类型> 标识符(max Size,初始化所有数值)。
    4. Int i[5]={1,2,3,4,5};Vector<类型>vi(I,i+2);//得到i索引值为3以后的值。
    5. vector> v;二维向量,注意最外层的<> 需要添加一个空格,否则旧版本的编译器可能无法识别。

    pop_back、push_back在容器的最后移除和插入数据

    #include 
    #include 
    #include 
    using namespace std;
     
    int main()
    {
        vector<int>obj;//创建一个向量存储容器 int
        for(int i=0;i<10;i++) // push_back(elem)在数组最后添加数据 
        {
            obj.push_back(i);
            cout<<obj[i]<<",";    
        }
     
        for(int i=0;i<5;i++)//去掉数组最后一个数据 
        {
            obj.pop_back();
        }
     
        cout<<"\n"<<endl;
     
        for(int i=0;i<obj.size();i++)//size()容器中实际数据个数 
        {
            cout<<obj[i]<<",";
        }
     
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    clear清楚容器的所有数据

    #include 
    #include 
    #include 
    using namespace std;
     
    int main()
    {
        vector<int>obj;
        for(int i=0;i<10;i++)//push_back(elem)在数组最后添加数据 
        {
            obj.push_back(i);
            cout<<obj[i]<<",";
        }
     
        obj.clear();//清除容器中所以数据
        for(int i=0;i<obj.size();i++)
        {
            cout<<obj[i]<<endl;
        }
     
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    vector排序

    #include 
    #include 
    #include 
    using namespace std;
     
    int main()
    {
        vector<int>obj;
        for(int i=0;i<10;i++)//push_back(elem)在数组最后添加数据 
        {
            obj.push_back(i);
            cout<<obj[i]<<",";
        }
     
        obj.clear();//清除容器中所以数据
        for(int i=0;i<obj.size();i++)
        {
            cout<<obj[i]<<endl;
        }
     
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    需要注意的是:

    1. sort方法需要在头文件要加入**#include < algorithm>**。
    2. 若想要sort来实现降序输出,则可以重写sort方法:
    bool compare(int a, int b) 
    { 
        return a < b; //升序排列,如果改为return a>b,则为降序 
    } 
    int a[20] = {2, 4, 1, 23, 5, 76, 0, 43, 24, 65}, i; 
    for (i = 0; i < 20; i++) 
        cout << a[i] << endl; 
    sort(a, a + 20, compare);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    访问vector容器元素:直接访问或者迭代器访问

    #include 
    #include 
    #include 
    #include 
    using namespace std;
     
    int main()
    {
        //顺序访问
        vector<int>obj;
        for(int i=0;i<10;i++)
        {
            obj.push_back(i);   
        } 
     
        cout<<"直接利用数组:"; 
        for(int i=0;i<10;i++)//方法一 
        {
            cout<<obj[i]<<" ";
        }
     
        cout<<endl; 
        cout<<"利用迭代器:" ;
        //方法二,使用迭代器将容器中数据输出 
        vector<int>::iterator it;//声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素 
        for(it=obj.begin();it!=obj.end();it++)
        {
            cout<<*it<<" ";
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    【C++深入浅出】类和对象下篇
    数据集 | 语音合成音库助力机器人客服“声入人心 ”
    [软考中级]软件设计师-计算机网络
    快速回复软件,请查收!
    nodejs+vue市民健身中心网上平台-计算机毕业设计
    Spring Cloud(十三):Spring 扩展
    python的socket模块以及通信相关学习笔记
    Vue实现拖拽穿梭框功能四种方式
    Go 复合类型之切片类型介绍
    江西股权转让项目:萍乡市天子山铁矿有限公司32%股权转让
  • 原文地址:https://blog.csdn.net/qq_42544728/article/details/126307912