天空闲话 发表于 2024-11-18 21:32:54

C/C++语言基础--initializer_list表达式、tuple元组、pair对组简介

本专栏目标


[*]更新C/C++的基础语法,包括C++的一些新特性
前言


[*]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 = v;
                }
        }
        constexpr size_t size()const { return _size; }
        T& operator[](int index)
        {
                return _arr;
        }
        T _arr{ T() };
};

Array<int, 10> arr = { 1,2,3,4,5,6 };
for (int i = 0; i < arr.size(); i++)
{
        cout << arr << " ";
}
注意: 这个表达式只允许读,不允许修改里面元素;
相对于数组:语法简单,可以支持{}初始化,也更安全了。
使用步调

1、用花括号初始化器列表列表初始化一个对象,其中对应构造函数担当一个std::initializer_list 参数
2、以花括号初始化器列表为赋值的右运算数,或函数调用参数,而对应的赋值运算符/函数担当 std::initializer_list 参数
3、绑定花括号初始化器列表到 auto ,包括在范围 for 循环中
std::tuple

页: [1]
查看完整版本: C/C++语言基础--initializer_list表达式、tuple元组、pair对组简介