C++ vector 列表初始化

double64發表於2024-09-18
vector<int> vl(10);      //v1有10 個元素,每個的值都是0
vector<int> v2{10};      //v2有1個元素,該元素的值是 10
vector<int> v3(10,1);   //v3有10個元素,每個的值都是1
vector<int> v4{10,1};   //v4有2個元素,值分別是10和1

如果初始化時使用了花括號的形式但是提供的值又不能用來列表初始化,就要考慮用這樣的值來構造 vector 物件了。例如,要想列表初始化一個含有 string 物件的 vector 物件,應該提供能賦給 string 物件的初值。此時不難區分到底是要列表初始化 vector 物件的元素還是用給定的容量值來構造 vector 物件:

vector<string> v5{"hi"};     //列表初始化:v5 有一個元素
vector<string> v6("hi");     //錯誤:不能使用字串字面值構建 vector 物件
vector<string> v7{10};       //v7有 10 個預設初始化的元素
vector<string> v8{10,"hi"}; //v8有10個值為"hi"的元素

儘管在上面的例子中除了第二條語句之外都用了花括號,但其實只有 v5 是列表初始化。要想列表初始化 vector 物件,花括號裡的值必須與元素型別相同。顯然不能用 int 初始化 string 物件,所以 v7 和 v8 提供的值不能作為元素的初始值。確認無法執行列表初始化後,編譯器會嘗試用預設值初始化 vector 物件。




《C++ Primer》 P90

相關文章