C++ vector
vector是一个容器,类似于数组,使用的顺序存储结构,可以看做是可以动态拓展的数组,使用vector的优点是其以常数时间进行索引,缺点是在中间进行插入和删除操作代价比较高,但是如果插入和删除发生在尾端速度仍然较快。
使用时需要包含头文件#include<vector>
初始化方式:
vector<int>v1;
当然int可以换成其它的类型。
其它初始化方式:https://lovedm.club/?id=87
常用操作:
v1.push_back() //在数组的最后添加一个数据 v1.pop_back() //去掉数组的最后一个数据 v1.front() //返回第一个元素(栈顶元素) v1.begin() //得到数组头的指针,用迭代器接受 v1.end() //得到数组的最后一个单元+1的指针,用迭代器接受 v1.clear() // 移除容器中所有数据 v1.empty() //判断容器是否为空 v1.erase(pos) //删除pos位置的数据 v1.erase(beg,end)// 删除[beg,end)区间的数据 v1.size() //回容器中实际数据的个数 v1.insert(pos,data) //在pos处插入数据
如下的例子:
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { //创建一个int型的向量存储容器 vector<int> v; v = {0, 3, 5, 6, 8, 9, 7, 4, 5, 3}; cout << "The origin vector:" << endl; for (int i = 0; i < 10; i++) { cout << v[i] << " "; } cout << endl << endl; //push_back()在数组最后添加数据 int a; cout << "Please enter the element you want to add:" << endl; cin >> a; v.push_back(a); for (int i = 0; i < v.size(); i++) { cout << v[i] << " "; } cout << endl << endl; //pop_back()去掉数组最后一个数据 cout << "The last 3 elements will be romoved: " << endl; for (int i = 0; i < 3; i++) { v.pop_back(); } for (int i = 0; i < v.size(); i++) { cout << v[i] << " "; } cout << endl << endl; //front()返回第一个元素,back()返回最后一个元素 cout << "The first element:" << v.front() << endl << "The last element:" << v.back() << endl << endl; //在指定位置插入数据,第一个参数是用迭代器表示的位置,第二个参数是要插入的数据 cout << "Insert an element:" << endl; v.insert(v.begin() + 2, 4); for (int i = 0; i < v.size(); i++) { cout << v[i] << " "; } cout << endl << endl; //empty()判断是否为空,返回布尔值 bool isEmpty = v.empty(); cout << isEmpty << endl << endl; //size()容器中实际数据个数 cout << "Now v has " << v.size() << " elements." << endl; for (int i = 0; i < v.size(); i++) { cout << v[i] << " "; } cout << endl << endl; //clear()清除所有元素 cout << "Clear all elements." << endl; v.clear(); cout << "Now v has " << v.size() << " elements." << endl; cout << endl; //重新赋值 cout << "Reassignment." << endl; int b[10] = {2, 3, 6, 9, 4, 1, 3, 5, 7, 0}; for (int i = 0; i < 10; i++) { v.push_back(b[i]); } //vector是支持迭代器的,可使用algorithm头文件下的sort()进行排序 cout << "before order:" << endl; for (int i = 0; i < 10; i++) { cout << v[i] << " "; } cout << endl; sort(v.begin(), v.end()); cout << "after order:" << endl; for (int i = 0; i < v.size(); i++) { cout << v[i] << " "; } cout << endl << endl; //可使用algorithm头文件下的reverse()进行翻转序列 cout << "reverse vector:" << endl; reverse(v.begin(), v.end()); for (int i = 0; i < v.size(); i++) { cout << v[i] << " "; } cout << endl << endl; //声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素 cout << "Use iterator to traverse all elements:" << endl; vector<int>::iterator it; for (it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl << endl; cout << v.size() << endl; cout << *(v.begin()) << endl; cout << *(v.end() - 1); system("pause"); return 0; }