本专栏目标
前言
- initializer_list表达式、tuple元组、pair对组再C++一样平常照旧比力常用的,尤其是对组在刷算法照旧挺好用的,这里做一个简介;
- 这三个语法团结C++17的结构化绑定会更好用,结构化绑定背面会更新;
- C语言背面也会继续更新知识点,如内联汇编;
- 欢迎收藏 + 关注,本人将会持续更新。
std::initializer_list
为了编写能够处理不同数量实参,但是类型相同,C++11新标准提供了std::initializer_list的方法,它提供了一种方便的方式来初始化容器或实行其他形式的初始化。std::initializer_list 紧张用于构造函数和其他函数的参数列表中,允许使用大括号 {} 困绕的初始化列表来传递多个元素。
- void showMsg(const std::initializer_list<std::string>& list)
- {
- for (auto& n : list)
- {
- cout << n << " ";
- }
- cout << endl;
- }
- showMsg({ "hello","world","嘿嘿"});
复制代码
- template<typename T,size_t _size>
- class Array
- {
- public:
- Array() {}
- Array(const std::initializer_list<T>& list)
- {
- size_t i = 0;
- for (auto& v : list) //必须使用这个
- {
- _arr[i++] = v;
- }
- }
- constexpr size_t size()const { return _size; }
- T& operator[](int index)
- {
- return _arr[index];
- }
- T _arr[_size]{ T() };
- };
- Array<int, 10> arr = { 1,2,3,4,5,6 };
- for (int i = 0; i < arr.size(); i++)
- {
- cout << arr[i] << " ";
- }
复制代码 注意: 这个表达式只允许读,不允许修改里面元素;
相对于数组:语法简单,可以支持{}初始化,也更安全了。
使用步调
1、用花括号初始化器列表列表初始化一个对象,其中对应构造函数担当一个std::initializer_list 参数
2、以花括号初始化器列表为赋值的右运算数,或函数调用参数,而对应的赋值运算符/函数担当 std::initializer_list 参数
3、绑定花括号初始化器列表到 auto ,包括在范围 for 循环中
std::tuple
|