C++ 栈 STL--Vector(全面且详细)

使用包含头文件<vector>

  1. 初始化

    1. 一维
      • 拷贝初始化

        vector<int> a(n + 1, 0);
        vector<int> b(a); // 两个数组中的类型必须相同,a和b都是长度为n+1,初始值都为0的数组
        vector<int> c = a; // 也是拷贝初始化,c和a是完全一样的数组
        
        
      • 多个元素初始化

        vector<int> b{1,2,3,4,5,6};//全部初始化为1
        //注意括号不同
        
      • 指定长度和初始化

        vector<int> b(3,1);//全部初始化为1
        
      • 指定长度

        vector<int> a(5)       //建立一个名为a的矢量
        
      • 一维初始化

        vector<int> b;//
        

        未分配空间,所以不可以直接赋值,可以使用push_back();

        vector<int> b;
        b.push_back(1);
        

    b. 二维

    • 内容
      • 一维固定长度,二维可变

        vector<int> v[5];//定义可变长二维数组
        **//注意:行不可变(只有5行), 而列可变,可以在指定行添加元素**
        //第一维固定长度为5,第二维长度可以改变
        

        vector<int> v[5]可以这样理解:长度为5的v数组,数组中存储的是vector<int> 数据类型,而该类型就是数组形式,故v为二维数组。其中每个数组元素均为空,因为没有指定长度,所以第二维可变长。可以进行下述操作:

        v[1].push_back(2);//在第二行末尾添加元素
        v[2].push_back(3);//在第三行末尾添加元素
        
      • 行列均可变

        //初始化二维均可变长数组
        vector<vector<int>> v;//定义一个行和列均可变的二维数组
        

        应用:可以在v数组里面装多个数组

        vector<int> t1{1, 2, 3, 4};
        vector<int> t2{2, 3, 4, 5};
        v.push_back(t1);//把t1装进v
        v.push_back(t2);//把t2装进v
        v.push_back({3, 4, 5, 6}) // {3, 4, 5, 6}可以作为vector的初始化,相当于一个无名vector
        
      • 行列长度均固定 n + 1行 m + 1列初始值为0

        vector<vector<int>> a(n + 1, vector<int>(m + 1, 0));
        //套娃
        
      • c++17或者c++20支持的形式(不常用),与上面相同的初始化

        vector a(n + 1, vector(m + 1, 0));
        

    可以使用数组访问法来访问每一个元素

  2. size()

    返回容器中元素数

    vector<int> a(10);
    
    int n=a.size()
    
  3. swap()

    交换两个容器中的内容

    vector<int> a(2);
    vector<int> b(2);
    swap(a,b);//a,b元素交换
    

    当两个矢量容器大小不等

        vector<int> a(2);
        vector<int> b(3);
        for (int i = 0; i < 2; i++)
        {
            cin >> a[i];
            cin.get();
        }
        for (int i = 0; i < 3; i++)
        {
            cin >> b[i];
            cin.get();
        }
        swap(a, b);
        for (int i = 0; i < 2; i++)
        {
            cout << a[i] << endl;
        }
        for (int i = 0; i < 3; i++)
        {
            cout << b[i] << endl;
        }
    

    会出错:

    输入 1 2 3 4 5

    输出 3 4 1 2 -1414812757

  4. 迭代器

    1. 声明一个迭代器

      vector<int>::iterator pd;//建立一个迭代器pd
      
          vector<int>::iterator pd;
          vector<int> a(5);
          pd=a.begin();
          *pd=56;
          cout<<*pd;
      

      可以看出。迭代器相当于一个指针

    2. begin() end()

      begin是第一个元素

      end是最后一个元素的下一个元素

  5. push_back() 将元素添加到矢量末尾(负责内存管理,增加矢量的长度

     ```cpp
         vector<int>::iterator pd;
         vector<int> a(5);
         for (int i = 0; i < 5; i++)
         {
             a[i] = i + 1;
         }
         int n;
         a.push_back(n); // 同时实现输入n后,插入最后一个
         //()中是要添加的数;
         cin >> a[5];
         for (pd = a.begin(); pd != a.end(); pd++) // 使用迭代器
         {
             cout << *pd << " ";
         }
     ```
    
  6. erase( ,) 删除矢量中给定区间的长度

     接受两个参数
     
     ```cpp
         vector<int>::iterator pd;
         vector<int> a(5);
         for (int i = 0; i < 5; i++)
         {
             a[i] = i + 1;
         }
         int n;
         a.push_back(n); // 同时实现输入n后,插入最后一个
         cin >> a[5];
         a.erase(a.begin(), a.begin() + 3);//删除第1-3个元素
         for (pd = a.begin(); pd != a.end(); pd++) // 使用迭代器
         {
             cout << *pd << " ";
         }
     ```
    
  7. insert( , , )(三个参数)

        vector<int> a(5);
        vector<int> b(5);
        for (int i = 0; i < 5; i++)
        {
            a[i] = i + 1;
        }
        b.insert(b.begin(), a.begin(), a.end());//插入
        for (int i = 0; i < 5; i++)
        {
            cout << b[i] << " ";
        }
    
  8. front()

    返回第一个数据

    vector<int> a(5);
    int n=a.front();
    
  9. c.back()

    返回数组中的最后一个数据

    vector<int> a(5);
    int n=a.back();
    
  10. c.pop_back()

    删除最后一个数据

  11. c.clear()

    清除元素

  12. c.empty()

    判断是否为空,为空返回真

  13. sort( , ) 对元素排序 -

    vector<int> a(n + 1);
    sort(a.begin() + 1, a.end()); // 对[1, n]区间进行从小到大排序
    
    

  • 27
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值