C++11 列表初始化(initializer_list),pair

1. {} 初始化

C++98 中,允许使用 {} 对数组进行初始化。

	int arr[3] = {
    0, 1, 2 };

C++11 扩大了 {} 初始化 的使用范围,使其可用于所有内置类型和自定义类型。

struct Date
{
   
    int _year;
    int _month;
    int _day;
    Date(int year, int month, int day)
        :_year(year)
        ,_month(month)
        ,_day(day)
    {
   }
};

### 回答1: initializer_listC++11 引入的一个特性,它允许我们用花括号 {} 来初始化一个容器或者一个对象。它的定义如下: ```c++ template <class T> class initializer_list { public: using value_type = T; using reference = const T&; using const_reference = const T&; using size_type = size_t; const T* begin() const noexcept; const T* end() const noexcept; size_t size() const noexcept; }; ``` 我们可以通过 initializer_list初始化一个容器,例如: ```c++ std::vector<int> v = {1, 2, 3, 4}; ``` 也可以用 initializer_list初始化一个对象,例如: ```c++ std::pair<int, std::string> p = {1, "hello"}; ``` 在函数参数中,我们也可以使用 initializer_list,例如: ```c++ void foo(std::initializer_list<int> ilist) { for (auto i : ilist) { std::cout << i << " "; } } ``` 这样,我们就可以用花括号来调用这个函数: ```c++ foo({1, 2, 3, 4}); ``` 总之,initializer_list 是一个很方便的特性,它让我们可以用花括号来初始化容器和对象,使代码更加简洁易读。 ### 回答2: initializer_listC++11中引入的一种特殊类型,用于简化在构造函数和其他函数中传递可变数量的参数。它可以用于以初始化列表形式传递参数,使用花括号{}包围参数,并用逗号分隔。 initializer_list实际上是一个包含相同类型的不定数量的对象的轻量级容器。通过使用initializer_list,我们可以像使用向量(vector)或数组(array)一样处理多个参数,方便地进行参数的传递。 例如,我们可以定义一个接受initializer_list作为参数的构造函数,来初始化一个类的对象。在构造函数中,我们可以使用range-based for循环来遍历initializer_list中的每个元素,并对每个元素执行相应的操作。 除了构造函数外,还可以在其他函数中使用initializer_list。例如,我们可以定义一个函数,接受initializer_list作为参数,并对其中的元素执行某些操作。这样,我们就可以在调用该函数时,方便地传递多个参数。 使用initializer_list时,需要注意以下几点: 1. initializer_list中的元素类型必须是相同的,如果不同会导致编译错误。 2. initializer_list中的元素是常量,不能修改。 3. initializer_list本身是一个轻量级的容器,不提供添加、删除元素等操作。 总之,initializer_list是一个方便的特性,可以简化在构造函数和其他函数中传递多个参数的操作。它提供了一种简洁明了的语法,方便地处理多个参数,并使代码更加清晰易懂。 ### 回答3: initializer_listC++11引入的一种特殊类型,用于在构造函数中初始化一个对象的成员。 initializer_list是一个模板类,其定义在头文件<initializer_list>中。它是一个轻量级容器,用于保存任意类型的元素列表,类似于数组或向量。 当我们使用initializer_list作为构造函数的参数时,它可以接收不同类型的初始化值,并将它们存储在内部的容器中。我们可以通过迭代器来遍历这些值。例如,我们可以使用initializer_list来创建一个自定义的向量类,实现类似于向量库的功能。 initializer_list的用法很简单。我们只需在构造函数的参数列表中使用initializer_list类型,并将我们希望初始化的值作为参数传递给构造函数。构造函数会自动将这些值保存在内部的容器中,我们可以在构造函数体内对这些值进行进一步的操作。 例如,假设我们有一个名为Vector的类,我们可以在其构造函数中使用initializer_list来接收一个数字列表,并将它们作为向量元素进行初始化: ```cpp #include <initializer_list> #include <iostream> class Vector { public: Vector(std::initializer_list<int> values) { for (auto it = values.begin(); it != values.end(); ++it) { data.push_back(*it); } } void print() { for (auto it = data.begin(); it != data.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; } private: std::vector<int> data; }; int main() { Vector v1{1, 2, 3, 4, 5}; // 使用initializer_list初始化向量 v1.print(); // 输出:1 2 3 4 5 return 0; } ``` 在上面的例子中,我们定义了一个接收initializer_list的构造函数。在主函数中,我们可以使用花括号语法来初始化一个Vector对象,并将数字列表{1, 2, 3, 4, 5}传递给构造函数。构造函数将会遍历这个数字列表,并将每个值添加到Vector的内部容器中。最后,我们调用print函数来输出向量的内容。 总结起来,initializer_list提供了一种方便的方式来在构造函数中初始化对象的成员。它可以接收不同类型的值,并将它们保存在一个轻量级容器中。我们可以通过迭代器来遍历这个容器,并对其中的值进行操作。initializer_list在代码编写中,特别是在构造函数的使用中,具有很大的便利性。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值