好像沒有人會在C++將這個東西翻譯,都直接叫做 Vector,這是一個同型物件的集合,所以Vector內的每個物件都有相同的型別。
#include <vector> // 使用vector必須先使用vector表頭檔 vector<int> vInt; // 定義vInt是會放int的一組vector vector<string> vString; // 定義vString是會放string的一組vector vector<int> vInt1(10); // vInt1內有10個以零為基礎的整數物件 vector<string> vString1(10); // vString1內有10個空字串為基礎的字串物件 vector<int> vInt2(10,-1); // vInt2內有10個-1的整數物件 vector<string> vString2(10,"hi"); // vString2內有10個hi字串物件Vector會動態成長!
Vector的重要特性是能夠有效的添加元素而成長,建議定義一個空的Vector然後再加入元素較有效率。
Vector的各種操作
#include <vector> // 使用vector必須先使用vector表頭檔 vector<int> vInt; // 定義vInt是會放int的一組vector vInt.empty(); // 如果vInt是空的回傳True,否則為False vInt.size(); // 回傳vInt的元素數量 vInt.push_back(x) // 在vInt的最後加入一個值為x的元素 重要!! vInt[n]; // vInt裡第n個元素Vector添加元素:採用push_back
vector<int> vInt; // 定義vInt是會放int的一組vector for (int i=0 ; i <= 10 ; i++) // 利用迴圈方式加入0到10的數字進入vector vInt.push_back(i); for (int i=0 ; i <= 10 ; i++) // 利用迴圈方式讀出vector中0到10格中的數字 cout << vInt[i];迭代器(Iterators):
是個可以用來檢驗元素的方法,因為不見得每個容器都支援下標操作(Subscript)。所有的容器都有定義Iterator型別,當然Vector也不例外。
注意:必須確定元素的存在才可使用下標動作
vector<int> vInt; // 定義vInt是會放int的一組vector cout << vInt[0]; // 錯誤!因為vInt中沒有任何元素可以回傳 vector<int> vInt2(10) cout << vint2[10] // 錯誤!因為vInt中是編號0~9共十個元素,沒有編號10這個每個容器都有個Iterator型別,宣告方法如下:
vector<int>::iterator iVer; // iVer是vector<int>的迭代器 string::iterator iStr; // iStr是string的迭代器迭代器的begin()與end():
begin()指的是迭代器所指的容器中第一個元素,end()則回傳最後一個元素。
vector<int>vInt; vector<int>::iterator iVer = vInt.begin(); // iVer是為vInt之迭代器中第一個元素 vector<int>::iterator iVer2 = vInt.end(); // iVer是為vInt之迭代器中最後一個元素的下一個位置迭代器的取值與累加:
取值會在迭代器變數前加上*,累加則可使用++來指向下一個元素
vector<int>vInt(10); //採用iterator方式 for (vector<int>::iterator iVer=vInt.begin();iVer!=vInt.end();++iVer) cout << *iVer << endl; // 取得vInt中10個元素 //一般採用的方法如下,雖然簡單但比較不一般化,而且要有支援下標 for (int i = 0 ; i<10 ; ++i) cout << vInt[i] << endl; //另一個採用size_type方式 for (vector<int>::size_type iS=0 ; iS != vInt.size(); ++iS) cout << vInt[iS] << endl;
參考書目:
C++ Primer 4/e 中文版 侯捷 譯