[筆記] C++學習筆記(Vector、Iterators)

向量(Vector):
好像沒有人會在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 中文版 侯捷 譯

提醒

本站內容即日起將轉到另一站上轉跳~