1. 程式人生 > >C++11新特性(2)- 列表初始化

C++11新特性(2)- 列表初始化

以前什麼樣

C或者C++在初始化陣列時,可以使用下面的花括號加初始值的形式:

intint_array[]={1,2,3,4,5};

在C++中,如果有下面這樣一個類:

classTester

{

public:

Tester(intvalue)

:m_value(value*2)

{}

voidprint(){

         cout<<m_value<<endl;

     }

private:

     intm_value;

};

那麼它的初始化可以寫成這樣:

Testertester_array[]={6,7,8,9,10};

Tester的建構函式可以被正常地呼叫。

存在的問題

問題就是這種方法的運用範圍很窄,許多場景都用不了。例如vector,可以像陣列一樣使用,可以自己管理資料長度,還提供各種運算元組的方法。宣告的方法也很簡單:

vector<int> int_vector;

但是有一個問題,當需要指定元素初始化vector時就不那麼方便了。

初始化方法1:

int_vector.push_back(5);
int_vector.push_back(4);
int_vector.push_back(3);
int_vector.push_back(2);
int_vector.push_back(1);

初始化方法二:

int int_array[] = {1, 2, 3, 4, 5};

for(int i = 0; i < sizeof(int_array)/sizeof(int_array[0]); ++i)
{
    int_vector.push_back(int_vector[i]);

}

無論那種方法,都給人一種如鯁在喉的感覺。

哪裡有不方便,哪裡就有改進

C++11中擴充套件了使用花括號初始化變數的應用範圍,稱這種初始化方式為列表初始化

例如:

可以像下面這樣初始化vector:

vector<int>int_vector={5,4,3,2,1};

可以像下面這樣初始化list:

list<int>int_list={5,4,3,2,1};

甚至可以像下面這樣初始化map

map<int,constchar*>id2Name={{1,"Zhang"},{2,"Wang"},{3,"Li"}};

另一種形式

下面和寫法也合法,和上面的幾種寫法等價。

vector

<int>int_vector{5,4,3,2,1};

list<int>int_list{5,4,3,2,1};

map<int,constchar*>id2Name{{1,"Zhang"},{2,"Wang"},{3,"Li"}};

有沒有夢想成真的感覺?

拜託

既然已經讀到這裡了,拜託大家再用一分鐘時間,將文章轉發到各位的朋友圈,微信群中。本公眾號的成長需要您的支援!以上就是今天的文章,歡迎點贊並推薦給您的朋友!閱讀更多更新文章,請掃描下面二維碼,關注微信公眾號【面向物件思考】