GuoXin Li's Blog

C++ vector 基础操作

字数统计: 900阅读时长: 4 min
2019/03/19 Share

C++ vector 容器浅析

Vector is a Sequence Container.

向量(矢量)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其他类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

容器的特性

  • Sequence 顺序序列

    顺序容器中的元素按照严格的线性顺序排列,每个单独的元素都能够在序列中位置被获取到

  • Dynamic array 动态数组

    支持定向获取在顺序中的任意元素,甚至可以通过指针进行算数进行该操作,提供了对序列末尾相对快速地添加/删除元素的操作

  • Allocator-aware 能够感知 C++ 内存分配器的

    容器使用一个内存分配器对象来动态处理它的存储需要

基本操作

vector 自带一些基本的操作函数:

  • void push_back(const T& x) :向向量尾部增加一个元素 X
  • iterator insert(iterator it, const T& x):向量中迭代器指向元素前增加一个元素
  • void pop_back():删除向量最后一个元素
  • void clear():清空向量中所有的元素
  • bool empty():判断向量是否为空
  • int size():返回向量中元素的个数

操作实例:

基础的插入、删除、向量组大小操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <vector>
using namespace std;

int main(){
vector<int> v;
for(int i = 0; i < 10; i++){
v.push_back(i); //add element
cout <<v.[i]<<",";
}
for(int i = 0; i < 5; i++){
v.pop_back();
}
cout<<"\n"<<end;

for(int i = 0; i < v.size(); i++){
cout << v.[i]<<",";
}

return 0;
}

输出:
1
2
3
0,1,2,3,4,5,6,7,8,9,

0,1,2,3,4,

排序操作

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
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
vector <int> v;
v.push_back(1);
v.push_back(4);
v.push_back(5);

sort(v.begin(), v.end()); //从小到大
cout <<"从小到大"<<endl;
for(int i = 0; i < v.size(); i++){
cout << v[i] <<",";
}

cout <<"\n"<<endl;

cout <<"从大到小" <<endl;
reverse(v.begin(), v.end()); //从大到小
for(int i = 0; i < v.size(); i++){
cout << v[i] <<",";
}

return 0;
}

输出结果:
1
2
3
4
5
从小到大:
0,1,3,

从大到小:
3,1,0,

注意点:

  • sort 函数需要头文件 #include \
  • sort 默认从小到大进行排序;如果使用 sort 来降序,可以重写 sort
1
2
3
4
5
bool compare(int a, int b){
return a > b;
}

sort(v.begin(), b.end, compare);

二维数组定义方法:

方法一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
int N=5, M=6;
vector<vector<int> > obj(N);
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;
}

方法二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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;
}

输出结果:
1
2
3
4
5
0 0 0 0 0 0 
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

CATALOG
  1. 1. C++ vector 容器浅析
    1. 1.1. 容器的特性
    2. 1.2. 基本操作
    3. 1.3. 操作实例:
      1. 1.3.1. 基础的插入、删除、向量组大小操作
        1. 1.3.1.0.1. 输出:
    4. 1.3.2. 排序操作
      1. 1.3.2.0.1. 输出结果:
  • 1.4. 二维数组定义方法:
    1. 1.4.0.0.1. 输出结果: