1. 程式人生 > >C++中的vector物件(1)——vector物件的初始化

C++中的vector物件(1)——vector物件的初始化

1、標準庫型別vector表示物件的集合,其中所有物件的型別必須相同。因為vector容納著“容納著”其他物件,所以也常被稱作容器。

2、想要使用vector必須包含適當的標頭檔案。

   #include <vector>

   using std::vector;//其定義在名稱空間std中

3、vector是一個類模板。當使用模板例項化類時,需要提供額外的資訊來指定編譯器把模板例項化成什麼樣的類,並且需要提供哪些資訊由模板自身決定。提供資訊的方式總是這樣:即在模板名字後面跟一對尖括號,在括號內放上資訊。

   對於vector來說,提供的資訊是vector內所存放物件的型別。

      vector<int> i;

4、vector能容納絕大多數型別的物件作為其元素,但因為引用不是物件,所以不存在包含引用的vector。除此之外絕大多數內建型別和類型別都可以構成vector物件,甚至組成vector的元素也可以是vector。

   但是需要指出,在早期版本的C++標準中如果vector的元素還是vector或者其他模板型別,則其定義的形式與現在的C++11新標準略有不同。

過去 vector<vector<int>"空格">
現在 vector<vector<int>>

5、和任何一種類型別一樣,vector模板控制著定義和初始化向量的方法。參考之前的文章《C++中的初始化》:

   5.1、直接初始化:vector<string> i2(i1);//這裡只能用另一個vector物件作為初始值

   5.2、拷貝初始化:vector<string> i2=i1;//這裡只能用另一個vector物件作為初始值

   5.3、預設值初始化:vector<int> i;//空vector物件

   5.4、重複序列初始化:vector<string> i(5,"asd");//asdasdasdasdasd

   5.5、值初始化:可以只提供vector物件容納的元素數量而略去初始值。此時庫會建立一個值初始化的元素初值,並把它賦給容器中的所有元素。這個初值由vector物件中元素的型別決定。

      vector<int> i(10);//10個元素,每個都初始化為0

      vector<string> j(10);//10個元素,每個都是空string物件

      5.5.1、有些類要求必須明確提供初始值,如果vector物件中元素的型別不支援預設初始化,我們就必須提供初始的元素值。

      5.5.2、使用值初始化時,只能使用直接初始化。

   5.6、列表初始化:vector<int> i{0,1,2,3};或vector<int> i={0,1,2,3};   //用列表中元素的拷貝初始化i

            想要列表初始化vector物件,花括號裡的值必須與元素型別相同。否則在編譯器確認無法執行列表初始化時,便會嘗試用值初始化或重複序列初始化。

vector<string> i{10};//10個0

            vector<string> j{10,'s'};10個s

最後再次強調,如果想使用字面量來初始化vector物件的話,只能考慮使用重複序列初始化及列表初始化。