C++ Primer-------vector

vector是標準庫類型,表示對象的集合,其中所有對象的類型都相同。集合中每個對象都有一個索引,用於訪問對象。
頭文件:<vector>
命名空間:std::vector
vector是一個類模板,模板本身不是類或函數,可以看作編譯器生成類或函數的一份說明。編譯器根據模板創建類或函數過程叫做實例化。

1. vector實例化

vector<int>  vec;   //保存int類型的對象
        vector<vector<int>> veci;  //c++11   該向量元素是int的向量對象

注意:vector能容納大多數類型的對象作爲元素,但是引用因爲不是對象,所以不能作爲元素。

1.1 元素爲vector類型

若組成vector的類型也是vector,在早期版本標準中其定義的形式和現在c++11不同,過去必須在外圍vector對象的右尖括號和元素類型之間加一個空格。

 vector<vector<int>> veci;  //c++11   該向量元素是int的向量對象
  vector<vector<int> > veci;  // 舊版本  該向量元素是int的向量對象

2. 定義和初始化vector對象

vector <T> v1;  //v1是一個空vector,執行默認處初始化
vector<T> v2(v1);  //v2包含v1所有元素
vector<T> v2=v1;     //與上個等價
vector<T> v3(n,val);  //包含n個值爲val的重複元素。
vector<T> v4(n);  //包含n個執行默認初始化的對象
vector<T> v5{a,b,c...}    //包含初始化值分別爲a,b,c...的元素
vector<T> v5={a,b,c...}  //與上個等價

注意:最常見的定義方式是先定義一個空vector,然後當運行時添加元素。

2.1 列表初始化vector對象(C++11)

C++11新標準提供一種vector對象的元素賦初值的方法,列表初始化。

vector<string> astr={"a","bc","def" };  

包含了三個元素,也就是目前astr的size大小爲3。
注意:若定義時需要提供初始值,則:
使用拷貝初始化(使用=)則只能提供一個初始化值,若提供類內的初始化值,只能使用拷貝或花括號,不能使用小括號。

vector<string> astr="a";
vector<string> astr={"a","b"};
vector<string> astr=("a","b");  //錯誤
vector<string> astr("a","b");//錯誤

2.1.1列表初始化值還是初始化元素數量

  1. 如果用圓括號,則括號內值用來構造vector對象,若用花括號,則表示列表初始化值。
vector<int> v1(10);//v1又10個元素,值爲0
vector<int> v2{10};//v2有一個元素,值爲10
vector<int> v1(10,1);//v1有10個元素,值爲1
vector<int> v2{10,1};//v2有2個元素,值爲10和1
  1. 若花括號內值和vector元素類型不匹配,則嘗試用來構造vector對象。
vector<string> v1{"he"}; //列表初始化,v1有一個元素,值爲“he”
vector<string> v2("he");  //錯誤,不能使用圓括號初始化值
vector<string> v3{10}; //v3有10個元素,值都爲空
vector<string> v4{10,"he"};  //v4有10個元素,值都爲“he”

2.2 創建指定數量元素

vector<string> astr(10,"b");//創建10個string類型的元素,其值都是“b”

3. 向vector中添加元素

vector<int> v2;
v2.push_back(2);  //向v2末尾添加一個元素 ,其值爲2.

注意:如果循環體內部包含向vector對象添加元素的語句,則不能使用範圍for循環,因爲此時vector的大小是變化的。
不能用下標形式添加元素,下標必須對確知存在的元素使用下標。
爲了防止越界,最好的方法就是使用範圍for語句循環。

其他vector操作

v.empty()    //判斷是否爲空,是返回true
v.at(n);//訪問位置n的元素
v.size();    //返回大小,返回值類型爲無符號整數型
v.push_back(t);   //插入元素t,大小增加1
v[n];    //返回v中n位置上元素的引用
v1=v2;   //拷貝v2到v1
v1={a,b,c...}  // 列表初始化值
v1==v2   //當所有元素都相等則真
v1!=v2     //顧名思義
<,>,<=,>= //顧名思義

其他操作查看官網資料

4. 數組與vector

int a[]={1,2,3,4,3,2,1,2,1};
vector<int> b(a,a+9);//將數組中0到9的元素拷貝到vector
vector<int> c=(&a[0],&a[8]); //結果和上個一樣

5. 迭代器遍歷

for(vector<int>::iterator t=a.begin();t!=a.end();t++)  //定義一個vector<int>類型的迭代器,進行循環迭代 
	......
	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章