C++11 初始化列表(initializer_list)

來源:互聯網
上載者:User

標籤:stream   zed   成員   return   amp   for   tor   color   size   

C++11對原有的初始化列表(用花括弧圍住的若干個值)進行了大幅的擴充。以下寫法在C++11中都是被允許的:

 1 int static_arr[5] = {1, 2, 3, 4};  // static_arr[4] is not initialized here 2 int static_arr2[] {1, 2, 3, 4};    // operator = can be omitted 3  4 int* dynamic_arr = new int[5] {1, 2, 3, 4};   5 // dynamic_arr[4] is not initialized here 6  7 vector<int> stl_vec {1, 2, 3, 4}; 8 set<int> stl_set {1, 2, 3, 3}; 9 cout << stl_set.size() << endl;    // 310 11 map<const char*, int> stl_map {12     {"Alice", 1},13     {"Bob", 2},14     {"Cindy", 3}15 };

C++11將初始化列表解釋成一個initializer_list<T>類型的變數(T是列表中元素的類型)。它相當於一個唯讀容器,只有三個成員函數:size(),begin()和end()。

在上面這個例子中,我們用初始化列表為STL容器提供初值。C++11為STL容器新增了一種建構函式,它可以接收一個initializer_list。

initializer_list也可以像其他類型的變數一樣,在語句中被建立,或者用作函數(包括類的建構函式)的參數:

 1 #include <initializer_list> // This header is required 2 #include <iostream> 3  4 using namespace std; 5  6 template <class Tp> 7 void print_ilist(const initializer_list<Tp> &ilist) 8 { 9     for (auto it = ilist.begin(); it != ilist.end(); ++it)10         cout << *it << endl;11 }12 13 struct Foo14 {15     int vals[10];16     int n = 0;17     18     Foo (const initializer_list<int> &ilist) {19         for (int v: ilist)20             vals[n++] = v;21     }22 };23 24 int main()25 {26     initializer_list<int> empty_ilist;27     empty_ilist = {1, 2, 3, 4};28     cout << empty_ilist.size() << endl;  // 429     30     Foo foo {1, 2, 3};31     Foo bar (empty_ilist);32     cout << "bar.n = " << bar.n << endl; // 433     34     initializer_list<float> float_ilist {1.0, 1.2, 1.5, 2.0};35     print_ilist(float_ilist);36     print_ilist( {"Reimu", "Marisa", "Sanae", "Reisen"} );37     return 0;38 }

 

C++11 初始化列表(initializer_list)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.