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();