STL总结系列:
Vector简介
Vector 是C++标准程序库中的一个类,可视为会自动扩展容量的数组,以循序(Sequential)的方式维护变量集合。vector的特色有支持随机存取,在集合尾端增删元素很快,但是在集合中间增删元素比较费时。vector是C++标准程序库中的众多容器(container)之一。 vector以模板(泛型)方式实现,可以保存任意类型的变量,包括用户自定义的数据类型,例如:它可以是放置整数(int)类型的 vector、也可以是放置字符串(string)类型的 vector、或者放置用户自定类别(user-defined class)的 vector。
成员函数简介与常用代码写法
头文件与声明
使用vector需要上面这个头文件。
1 2 3 4 5 6 7 8
| vector<int> v;
vector<int> v2(10);
vector<int> v3(5,99);
vector<int> v4(v2);
|
push_back(),pop_back()添加删除元素
1 2 3 4 5
| int A[10]={9,5,8,6,4,2,3,7,0,1}; for(int i=0;i<10;i++){ v.push_back(A[i]); } v.pop_back();
|
在vector头部添加元素,无法完成,因为vector的数据结构为数组,无法在头部插入元素,否则需要整个数组前移;在vector头部删除元素,无法完成,理由同上。
取某位置的元素值
1 2
| cout<<"在0位置的元素值为:"<<v.at(0)<<endl; cout<<"在1位置的元素值为:"<<v[1]<<endl;
|
vector的遍历
1 2 3 4 5
| vector<int>::iterator vIter; for (vIter = v.begin(); vIter < v.end(); vIter++){ cout << *vIter << " "; }
|
访问头部元素和尾部元素
1 2 3 4
| cout << "尾部数据的值为:" << v.back() << endl;
cout << "头部数据的值为:" << v.front() << endl;
|
vector的大小及判空
1 2 3
| cout << "vector中的最大容量为:" << v.max_size() << endl; cout << "vector中的元素个数为:" << v.size() << endl; cout << "vector是否为空:" << v.empty() << endl;
|
交换元素位置
升降排序
1 2 3 4 5
| sort(v.begin(), v.end());
reverse(v.begin(), v.end());
|
删除某个元素
1 2 3
| vector<int>::iterator vItera = v.begin(); vItera = vItera + 2; v.erase(vItera);
|
为什么要使用iterator来进行定位,因为数组如果要删除一个元素或者插入一个元素,会导致其他元素移动,所以不能直接进行删除
插入元素
vector插入某元素,要使用iterator来定位某个位置
1 2 3
| vector<int>::iterator vInsert = v.begin(); vInsert = vInsert + 2; v.insert(vInsert, 777);
|
完整代码
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| #include <iostream> #include <vector> //使用vector需要引用这个头文件 #include <iterator> //迭代器 #include <algorithm> using namespace std;
void PrintVector(vector<int> c){ cout << "Vector中的数据为:"; vector<int>::iterator vIter; for (vIter = c.begin(); vIter < c.end(); vIter++){ cout << *vIter << " "; } cout << endl; }
int main(){ vector<int> v; vector<int> v2(10); vector<int> v3(5,99); vector<int> v4(v2);
int A[10]={9,5,8,6,4,2,3,7,0,1}; for(int i=0;i<10;i++){ v.push_back(A[i]); } v.pop_back();
cout<<"在0位置的元素值为:"<<v.at(0)<<endl; cout<<"在1位置的元素值为:"<<v[1]<<endl;
vector<int>::iterator vIter; for (vIter = v.begin(); vIter < v.end(); vIter++){ cout << *vIter << " "; } cout << endl;
cout << "尾部数据的值为:" << v.back() << endl; cout << "头部数据的值为:" << v.front() << endl;
cout << "vector中的最大容量为:" << v.max_size() << endl; cout << "vector中的元素个数为:" << v.size() << endl;
cout << "vector是否为空:" << v.empty() << endl;
swap(v[0],v[1]); PrintVector(v);
sort(v.begin(), v.end()); PrintVector(v); reverse(v.begin(), v.end()); PrintVector(v);
vector<int>::iterator vItera = v.begin(); vItera = vItera + 2; v.erase(vItera); PrintVector(v);
vector<int>::iterator vInsert = v.begin(); vInsert = vInsert + 2; v.insert(vInsert, 777); PrintVector(v);
v.clear(); PrintVector(v); cout << "vector是否为空:" << v.empty() << endl;
system("pause"); return 0; }
|
基本操作函数汇总
函数 |
用法 |
begin() |
返回指向容器第一个元素的迭代器 |
clear() |
删除所有元素 |
empty() |
检查容器是否为空 |
end() |
返回指向容器尾端的迭代器 |
erase() |
删除一个元素 |
insert() |
插入元素 |
max_size() |
返回可以容纳的最大元素个数 |
rbegin() |
返回指向容器最后元素的逆向迭代器 |
rend() |
返回指向前端的逆向迭代器 |
size() |
返回容纳的元素数 |
swap() |
交换内容 |
push_back() |
将元素添加到容器末尾 |
pop_back() |
移除末元素 |
resize() |
改变容器中可存储元素的个数 |
front() |
访问第一个元素 |
back() |
访问最后一个元素 |
data() |
返回指向内存中数组第一个元素的指针 |
capacity() |
返回当前存储空间能够容纳的元素数 |
reserve() |
预留存储空间 |
本文参考自:
https://zh.wikipedia.org/wiki/Vector_(STL)
https://zh.cppreference.com/w/cpp/container/vector