c++ initialize_list
2016-04-17 12:55
417 查看
看到这么一个东西,可以实现花括号( "{" "}" )初始化容器类。
使用时需包含头文件
#include <initialize_list>
我们都看过这样的代码
右边那个花括号返回的类型便是initialize_list
我们可以在自己的类中这么用
试验一下
可以正常输出
cppreference 的测试代码如下:可以看到这个东西的花样还是挺多的
使用时需包含头文件
#include <initialize_list>
我们都看过这样的代码
vector<int> arr = { 1,2,3,4,5 }; 或者 vector<int> arr{ 1,2,3,4,5 };
右边那个花括号返回的类型便是initialize_list
我们可以在自己的类中这么用
class foo { public: std::vector<int> data; //构造函数里放上initialize_list foo() {} foo(std::initializer_list<int> list) :data(list) {} void print() { for (auto item : data) { std::cout << item; } std::cout << endl; } };
试验一下
int main() { foo test1{ 1,2,3,4,5 }; foo test2 = { 1,2,3,4,5 }; test1.print(); test2.print(); return 0; }
可以正常输出
cppreference 的测试代码如下:可以看到这个东西的花样还是挺多的
#include <iostream> #include <vector> #include <initializer_list> template <class T> struct S { std::vector<T> v; S(std::initializer_list<T> l) : v(l) { std::cout << "constructed with a " << l.size() << "-element list\n"; } void append(std::initializer_list<T> l) { v.insert(v.end(), l.begin(), l.end()); } std::pair<const T*, std::size_t> c_arr() const { return{ &v[0], v.size() }; // copy list-initialization in return statement // this is NOT a use of std::initializer_list } }; template <typename T> void templated_fn(T) {} int main() { S<int> s = { 1, 2, 3, 4, 5 }; // copy list-initialization s.append({ 6, 7, 8 }); // list-initialization in function call std::cout << "The vector size is now " << s.c_arr().second << " ints:\n"; for (auto n : s.v) std::cout << n << ' '; std::cout << '\n'; std::cout << "Range-for over brace-init-list: \n"; for (int x : {-1, -2, -3}) // the rule for auto makes this ranged-for work std::cout << x << ' '; std::cout << '\n'; auto al = { 10, 11, 12 }; // special rule for auto std::cout << "The list bound to auto has size() = " << al.size() << '\n'; //templated_fn({1, 2, 3}); // compiler error! "{1, 2, 3}" is not an expression, // it has no type, and so T cannot be deduced templated_fn<std::initializer_list<int>>({ 1, 2, 3 }); // OK templated_fn<std::vector<int>>({ 1, 2, 3 }); // also OK }
相关文章推荐
- 最长01子串
- localtime和gmtime函数使用
- C++中各种类的大小
- VC++动态链接库(DLL)编程深入浅出(四) 出处:PConline
- 时间片轮转调度算法的C语言模拟实现
- 《Accelerated C++》前面部分笔记
- 钱能c++第9章以前的笔记
- C++编程基础笔记章节八
- A率13折线PCM编码的C语言实现
- c语言之模拟实现求子串(strstr)函数
- [LeetCode]137. Single Number II
- C++编程基础笔记章节七
- K-Means算法的C语言实现
- C语言每日小练(四)——勇者斗恶龙
- C++编程基础笔记章节六
- C++编程基础笔记章节五
- C++ 笔试题集锦(2)
- C语言入门(1)——C语言概述
- C++编程基础笔记章节三
- [LeetCode]136. Single Number