vector容器用法(更新中)

1、概念
vector中文意思是向量,我们可以把vector当作一个动态数组,并且能够将它进行动态增删等,它的作用其实和链表类似。

2、特点

  1. 线性序列
    vector中的元素排列是线性序列
  2. 动态数组
    可以向访问数组那样快速地访问vector中的元素,并且能够方便地在序列末尾添加或者删除元素
  3. 内存分配器
    内存分配器能够根据vector存储需求动态地为它分配内存

3、初始化
一共有5中初始化方法:

  1. vector<int> a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
  2. vector<int> a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
  3. vector<int> a(b); //用b向量来创建a向量,整体复制性赋值
  4. vector<int> a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
  5. int b[7]={1,2,3,4,5,9,8};
    vector<int> a(b,b+7); //从数组中获得初值

4、增加函数

  1. void push_back(const T& x):向量尾部增加一个元素X
  2. iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
  3. iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
  4. iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据

5、删除函数

  1. iterator erase(iterator it):删除向量中迭代器指向元素
  2. iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
  3. void pop_back():删除向量中最后一个元素
  4. void clear():清空向量中所有元素

5、遍历函数

  1. reference at(int pos):返回pos位置元素的引用
  2. reference front():返回首元素的引用
  3. reference back():返回尾元素的引用
  4. iterator begin():返回向量头指针,指向第一个元素
  5. iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
  6. reverse_iterator rbegin():反向迭代器,指向最后一个元素
  7. reverse_iterator rend():反向迭代器,指向第一个元素之前的位置

3、排序
首先引入 #include <algorithm>
从小到大:sort(a.begin(),a.end());
从大到小:reverse(a.begin(),a.end());

4、访问
第一种方法:直接数组访问
第二种方法:迭代器访问,通过迭代器来遍历或指向容器的元素(说明迭代器是一种指针)

5、判断是否为空
bool empty() const:判断向量是否为空,若为空,则向量中无元素

6、大小函数

  1. int size() const:返回向量中元素的个数
  2. int capacity() const:返回当前向量所能容纳的最大元素值
  3. int max_size() const:返回最大可允许的vector元素数量值

7、二维数组两种定义方式
方法一:

#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main()
{
   int N=5, M=6; 
   vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列 

   for(int i=0; i< obj.size(); i++)//输出二维动态数组 
   {
       for(int j=0;j<obj[i].size();j++)
       {
           cout<<obj[i][j]<<" ";
       }
       cout<<"\n";
   }
   return 0;
}

方法二:

#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main()
{
   int N=5, M=6; 
   vector<vector<int> > obj(N); //定义二维动态数组大小5行 
   for(int i =0; i< obj.size(); i++)//动态二维数组为5行6列,值全为0 
   { 
       obj[i].resize(M); 
   } 

   for(int i=0; i< obj.size(); i++)//输出二维动态数组 
   {
       for(int j=0;j<obj[i].size();j++)
       {
           cout<<obj[i][j]<<" ";
       }
       cout<<"\n";
   }
   return 0;
}
posted @ 2021-08-11 21:23  智子lock  阅读(196)  评论(0编辑  收藏  举报