std::initializer_list<T>

std::initializer_list<T>提供了以下接口:

size_t size() const noexcept;
const T* begin() const noexcept;
const T* end() const noexcept;

通过std::initializer_list<T>可以实现大括号初始化对象。也可以实现类似于动态类型的效果。

 1 #include <iostream>
 2 #include <initializer_list>
 3 #include <vector>
 4 
 5 using namespace std;
 6 
 7 class Test {
 8     vector<int> list;
 9 public:
10     Test(std::initializer_list<int> args) {
11         list.insert(list.end(), args.begin(), args.end());
12     }
13     void print() {
14         for (auto &it : list) {
15             cout << it << ' ';
16         }
17         cout << endl;
18     }
19     vector<int> &get() {
20         return list;
21     }
22 };
23 
24 class TestArray {
25     vector<Test> list;
26 public:
27     TestArray(std::initializer_list<Test> args) {
28         list.insert(list.end(), args.begin(), args.end());
29     }
30     void print() {
31         for (auto &it : list) {
32             for (auto &x : it.get()) {
33                 cout << x << ' ';
34             }
35             cout << endl;
36         }
37     }
38 };
39 
40 int main()
41 {
42     Test t{1, 2, 3, 4, 5, 6};
43     t.print();
44     TestArray t2{ {1, 2},{3},{4, 5, 6},{7, 8, 9, 10} };
45     t2.print();
46     int n;
47     cin >> n;
48     return 0;
49 }
原文地址:https://www.cnblogs.com/HadesBlog/p/13700491.html