向量容器(vector container in STL)

向量(vector)可以看成是”动态数组”,即可以保存的元素个数是可变的。

函数名功能
vector()创建一个空vector
vector(int nSize)创建一个vector,元素个数为nSize
vector(const vector&):复制构造函数
vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中
push_back(element)增加一个元素到向量的后面,元素是已经创建好的,然后移动或复制到向量中。
emplace_back(element)增加一个元素到向量的后面,在向量末尾构建一个元素,一般情况下优先使用emplace_back。
pop_back()弹出(删除)向量的最后一个元素
insert(position, value)插入元素到向量的指定位置
erase(position)删除向量指定位置的元素
clear()清除向量所有元素,size变为0
[]取向量的第几个元素,类似数组的下标运算
front()取向量的第一个元素
back()取向量的最后一个元素
begin()向量的第一个元素的位置,反回第一个元素迭代器(指针)
end()向量的结束位置。注意:返回的迭代器是最后一个元素的后面位置,不是最后一个元素的迭代器。
size()元素个数,向量的大小-即向量中已有元素的个数
resize()重新设定向量的大小,即可以保存多少个元素
empty()判断向量是否空,等价于size为0
reserve(n)申请一块连续的空间n

一、向量的构造函数

 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
/**************************************************************** 
 * Description: vector construct
 * Author: Alex Li
 * Date: 2024-06-19 18:40:49
 * LastEditTime: 2024-11-08 10:14:32
****************************************************************/
#include <iostream>
#include <vector>
using namespace std; 
int main (){  
  vector<int> first;                             // 建一个空的vector,名字叫first
  vector<int> first0={1,2,3,4,5};                   // 建一个vector,名字叫first1,并且给出初始值
  first.assign (5,10);                              //给first规定空间,5个元素,每个元素初始值是10
  //first.assign({1,2,3,4,5});                      //给first赋值    
  vector<int> second (4,100);                       // 有四个元素,每个元素的初始值是100
  vector<int> third (second.begin(),second.end());  // 用second初始化third
  vector<int> fourth (third);                       // 复制third给fourth
  
  
  int myints[] = {16,2,77,29};
  vector<int> fifth(myints,myints+4);  //把myints数组给到fifth
  //std::vector<int> fifth(second.begin(),second.begin()+4); //
  //std::vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );

  cout << "The contents of fifth are: ";
  for(int i=0;i<fifth.size();i++)cout<<fifth[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
29
30
31
32
33
/**************************************************************** 
 * Description: vector construct
 * Author: Alex Li
 * Date: 2024-06-19 18:40:49
 * LastEditTime: 2024-06-19 20:48:03
****************************************************************/
#include <iostream>
#include <vector>

int main (){  
  std::vector<int> first;                             // 建一个空的vector,名字叫first
  std::vector<int> first0={1,2,3,4,5};                   // 建一个vector,名字叫first1,并且给出初始值
  first.assign (5,10);                              //给first规定空间,5个元素,每个元素初始值是10
  //first.assign({1,2,3,4,5});                      //给first赋值    
  std::vector<int> second (4,100);                       // 有四个元素,每个元素的初始值是100
  std::vector<int> third (second.begin(),second.end());  // 用second初始化third
  std::vector<int> fourth (third);                       // 复制third给fourth
  
  
  int myints[] = {16,2,77,29};
  std::vector<int> fifth(myints,myints+4);  //把myints数组给到fifth
  //std::vector<int> fifth(second.begin(),second.begin()+4); //
  //std::vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );

  std::cout << "The contents of fifth are:";
  for(int i=0;i<fifth.size();i++)std::cout<<fifth[i]<<' ';

//   for (std::vector<int>::iterator it = fifth.begin(); it != fifth.end(); ++it)
//     std::cout << ' ' << *it;
//   std::cout << '\n';

  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
32
33
34
35
36
/**************************************************************** 
 * Description: initial vector and two dimemsion vector
 * Author: Alex Li
 * Date: 2024-03-26 05:31:00
 * LastEditTime: 2024-03-26 07:54:00
****************************************************************/
#include <iostream>
#include <vector>
using namespace std;

int main(){
    int a,b;  
    cin >> a >> b;
    vector<int> v0;  //定义一维向量v0
    //vector<int> v0(a); //定义一维向量v0,大小是a
    //vector<int> v0(a,0); //定义一维向量v0,大小是a,初始值0
    v0.resize(a);//初始化一维向量大小
    //v.resize(size, initialValue);//初始化一维向量大小并赋初始值
    for(int i=0;i<a;i++)v0[i]=i;
    for(int i=0;i<a;i++)cout<<v0[i]<<' ';
    cout<<'\n';
    vector<vector <int> >  v1;  
    //定义二维向量,大小a,b,初始值0
    //vector<vector <int> > v1(a,vector<int>(b,0)); 
    v1.resize(a, vector<int>(b));// 初始化二维向量大小
   //v.resize(a, vector<int>(b, initialValue)); 初始化二维向量大小并赋初始值
    for(int i=0;i<a;i++){
        for(int j=0;j<b;j++)v1[i][j]=i+j;
    }

    for(int i=0;i<a;i++){
        for(int j=0;j<b;j++)cout<<v1[i][j]<<',';
    cout<<'\n';
    }

}

四、vector and pair

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**************************************************************** 
 * Description:  vector and pair
 * Author: Alex Li
 * Date: 2024-11-07 19:32:12
 * LastEditTime: 2024-11-08 09:23:13
****************************************************************/
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
int main() {
    
    vector<pair<int,string>> v;
    pair<int,string> p;
    p={1,"lisi"};
    v.push_back(make_pair(1, "zhangsan"));
    v.push_back(p);
    v.emplace_back(4,"zhaoliu");
    
    for(auto i: v)
        cout << i.first << " " << i.second<< endl;
   return 0;
}

特别注意,如果在vector已经给定了初始容量的时候,再用push_back(),所添加的元素会放在初始容量的后面。

vector<int>  m(3);
m.push_back(8);
cout<<m[3];

上面的代码m初始化容量是3,所 以当push_back元素8进数组的时候,数组是放到下标为[3]的位置,也就是第4个元素。

向量(vector)底层实现方法:

  • 连续内存存储std::vector 将其元素存储在连续的内存空间中,这意味着你可以像使用普通数组一样使用指针或数组索引来访问元素。
  • 动态调整大小:虽然底层是数组,但 std::vector 可以在运行时动态地调整大小。当新元素被添加到 vector 中,而当前的内存空间不足以容纳更多元素时,std::vector 会自动分配一个更大的内存块,将现有的元素复制到新的内存地址,然后释放旧的内存。
  • 内存管理std::vector 通常会预留一定的容量以减少内存重新分配的次数。当添加元素时,如果预留的容量未被用完,就不需要重新分配内存。
Scroll to Top