vector 是 C++ 对数据结构动态数组的实现。要使用 vector,请在程序头添加:数组
#include <vector> using name space std;
vector<int> v; //定义一个空 vector 对象
vector<int> v(10); //定义一个具备 10 个元素的 vector 对象(int 型元素默认初始化为 0)
vector<int> v(3,5); //v = { 5, 5, 5 }
vector<int> v1(v); //v1 = v
vector<int> v = { 1, 2, 3 };
vector<int> v1 = v;
数据结构
也能够使用一对迭代器来将 vector 初始化为由这对迭代器所指示的元素序列,此时不要求这两个容器的类型相同,甚至也不要求它们的元素类型相同,而只须要它们的元素类型能够相互转化便可。如:函数
set<char> s { 'a', 'b', 'c' }; vector<int> v (s.begin(), s.end()); // v = { 97, 98 , 99}
因为 vector 的实现机制,使得 vector 在尾端追加元素的平均用时较短,但在首部插入元素却很慢,故 vector 并不提供像 .push_front()
这样的成员函数。尽管如此,使用.insert()
仍是能够实如今 vector 的首部插入元素,只不过这样很慢。所以,若须要在首部频繁插入元素,能够考虑使用 dequespa
vector<int> v = { 1, 2, 3 }; v.push_back(4); // v = { 1, 2, 3, 4 };
插入单个元素code
vector<int> v = { 1, 2, 3 }; v.insert(dp.begin(), 4); // v = { 4, 1, 2, 3 };
插入一段元素对象
vector<int> v = { 1, 2 }; vector<int> v_1 = { 3, 4 }; v_1.insert(v_1.begin(), v.begin(), v.end()); // v = { 1, 2, 3, 4 };
在循环中插入元素
插入元素一般会使迭代器失效,这会给在循环中插入元素带来不小的麻烦。insert 操做在插入元素成功后会返回插入位置的有效迭代器。it
vector<int> v = { 1, 2 }; vector<int> v_1 = { 3, 4 }; auto it = v_1.begin(); for (auto e:v) auto it = v_1.insert(it, e); // v_1 = { 2, 1, 3, 4 };
vector<int> v = { 1, 2, 3 }; v.pop_back(4); // v = { 1, 2 };
删除一个元素class
vector<int> v = { 1, 2, 3 }; v.erase(v.begin()); // v = { 2, 3 };
删除一段元素容器
vector<int> v = { 1, 2, 3, 4 }; v.erase(v.begin(), v.begin()+2); // v = { 3, 4 };
在循环中删除元素
删除元素一般会使迭代器失效,这会给在循环中删除元素带来不小的麻烦。erase 操做在插入元素成功后会返回插入位置的有效迭代器。循环
vector<int> v = { 1, 2, 3, 4 }; auto it = v.beign(); while (it!=v.end()) { //删除值为奇数的元素,跳过值为偶数的元素 if (*it%2) auto it = v.erase(it); else it++; } // v = { 2, 4 };
像数组同样,vector 支持下标随机访问
vector<int> v = { 1, 2, 3, 4 }; cout << v[1]; // 输出 2
vector<int> v = { 1, 2, 3, 4 }; //将 v 中值为奇数的元素置为 0 for (auto it=v.begin(); it!=v.end(); it++) { if (*it%2) *it = 0; } // v = { 0, 2,0, 4};
vector<int> v = { 1, 2, 3, 4 }; //将 v 中值为奇数的元素置为 0 for (auto n : v) { if (n%2) cout << n; } // 输出:1 3
注意:这种方式获得的 n 是 v 中元素的拷贝,若想要获得 v 元素的自己,请使用 &for (auto &n:v)
vector 没有查找元素存在性的成员函数,请使用顺序容器的通用方法。
vector<int> v = { 1, 2, 3, 4 }; auto it_1 = find(v.begin(), v.end(), 1); // it_1 = v.begin(); autp it_2 = find(v.begin(), v.end(), 9); // it_2 = v.end();