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); 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++) { 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)); 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
|