What does initializer_list do?

What does initializer_list do?

本文关键字:do list does initializer What      更新时间:2023-10-16

我目前的任务是为教授提供给我们的特殊自定义类创建一个定义;我从未见过initializer_list在使用中,我的教授也没有复习过它。它到底有什么作用?

template<class T>
LinkedQueue<T>::LinkedQueue(const std::initializer_list<T>& il) {
}

我必须定义构造函数,我将自己完成。我只想知道这个参数的作用。另外,我的编译器一直告诉我找不到 std::initializer_list 成员声明。我已经使用 #include 导入了它,但问题仍然存在。

std::initializer_list 是一个包含一系列初始值设定项的类模板,它具有非常小的接口,因为它的唯一用途是使用它包含的值序列初始化另一个对象。与std::vectorstd::deque不同,std::initializer_list不打算用作通用容器。

当有人尝试列出初始化LinkedQueue<T>时调用函数LinkedQueue<T>::LinkedQueue(const std::initializer_list<T>&),如下所示:

LinkedQueue<int> q {1, 2, 3};

该语言会自动构造一个 std::initializer_list<int> 对象,该对象按该顺序包含值 1、2、3。此对象将传递给构造函数。构造函数返回后,用户期望新构造的 LinkedQueue<int> 对象将按该顺序包含值 1、2、3。

您需要编写构造函数,以便这是真的。为此,您可以使用基于范围的 for 循环循环遍历std::initializer_list<T>对象,并按顺序将值添加到列表中。假设您有一个 push_back 函数和一个有效的默认构造函数,这样的东西可能会起作用:

template<class T>
LinkedQueue<T>::LinkedQueue(const std::initializer_list<T>& il): LinkedQueue() {
    for (const T& val : il) {
        push_back(val);
    }
}

这将委托给默认构造函数来设置类不变量,然后按顺序插入给定的初始值设定项。

它允许你用{}启动你的LinkedQueue。如

 LinkedQueue<char> theQueue = {'a','b','c','d','e','f','g','h' };

以及其他内容,在有关它及其用途的页面上详细介绍。

在 C++11 中,初始值设定项列表是一种在需要多个文本时将内容分配给对象的方法。

例如,

您可以初始化一个列表,例如:

std::list<int> myList{1,2,3,4,5};

你可以编写你的类,所以它接受这样的语法。

作为简约示例,以下函数接受初始化列表:

void func( initializer_list<int> intList)
{
    for (auto i: intList) /*whatever*/;
}
// used as:
func({1,2,3,5});
初始化

必须是相同的类型:不能在初始化列表中混合来自不同类型的值。