c++ initializer_list
首先需要开启编译器C++11,按照如下步骤(codeblocks)
Setting-->Compiler 勾选下图红色方框的选项。
首先看看initializer_list 的作用,可以用大括号来初始化STL的容器,以及可以在for循环中来使用。
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 int main() 6 { 7 vector<string> v{"ab","cd"}; 8 vector<string>::iterator begin = v.begin(); 9 while(begin!=v.end()) 10 { 11 cout << *begin++ << endl; 12 } 13 for(int i:{1,2,3}) 14 { 15 cout << i << endl; 16 } 17 return 0; 18 }
打印结果如下:
来看看正式的作用:
我们可以在一个函数的参数中声明initializer_list,这样,我们在调用这个函数时,可以直接给这个函数传递大括号即可。如下代码所示:
1 #ifndef S_H_INCLUDED 2 #define S_H_INCLUDED 3 4 #include <vector> 5 #include <initializer_list> 6 #include <iostream> 7 8 using namespace std; 9 10 template <typename T> 11 class S 12 { 13 private: 14 vector<T> v; 15 public: 16 S(initializer_list<T> l):v(l) 17 { 18 cout << "constructed with a " << l.size() << " -element lists" << endl; 19 } 20 void append(initializer_list<T> l) 21 { 22 v.insert(v.end(),l.begin(),l.end()); 23 } 24 void append(T t) 25 { 26 v.push_back(t); 27 } 28 void print() 29 { 30 typename vector<T>::iterator begin = v.begin(); 31 while(begin!=v.end()) 32 { 33 cout << *begin++ << endl; 34 } 35 } 36 }; 37 38 #endif // S_H_INCLUDED
看看调用的代码:
1 #include <iostream> 2 #include "S.h" 3 4 using namespace std; 5 6 int main() 7 { 8 S<int> s{10}; 9 s.append(1); 10 s.append({2,3,4,6,9}); 11 cout << "begin to print()" << endl; 12 s.print(); 13 return 0; 14 }
最后打印结果如下:
不要忘记了,头文件是 #include <initializer_list>