以前什么樣
C或者C++在初始化數(shù)組時,可以使用下面的花括號加初始值的形式:
int?int_array[]?=?{1,?2,?3,?4,?5};
在C++中,如果有下面這樣一個類:
class?Tester
{
public:
?????Tester(int?value)
?????????:m_value(value?*?2)?
?????{?}
? ???void?print(){
???????? cout?<<?m_value?<<?endl;
???? }
private:
???? int?m_value;
};
那么它的初始化可以寫成這樣:
Tester?tester_array[]?=?{6,?7,?8,?9,?10};
Tester的構(gòu)造函數(shù)可以被正常地調(diào)用。
存在的問題
問題就是這種方法的運(yùn)用范圍很窄,許多場景都用不了。例如vector,可以像數(shù)組一樣使用,可以自己管理數(shù)據(jù)長度,還提供各種操作數(shù)組的方法。聲明的方法也很簡單:
vector
但是有一個問題,當(dāng)需要指定元素初始化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]);
}
無論那種方法,都給人一種如鯁在喉的感覺。
哪里有不方便,哪里就有改進(jìn)
C++11中擴(kuò)展了使用花括號初始化變量的應(yīng)用范圍,稱這種初始化方式為列表初始化。
例如:
可以像下面這樣初始化vector:
vector
可以像下面這樣初始化list:
list
甚至可以像下面這樣初始化map
map
另一種形式
下面和寫法也合法,和上面的幾種寫法等價。
vector
list
map
有沒有夢想成真的感覺?