gpt4 book ai didi

c++ - initializer_list 有什么作用?

转载 作者:搜寻专家 更新时间:2023-10-31 00:31:05 26 4
gpt4 key购买 nike

我目前的任务是为教授提供给我们的特殊自定义类(class)创建定义;我从未见过使用过 initializer_list,我的教授也没有仔细研究过它。它具体有什么作用?

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

}

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

最佳答案

std::initializer_list是一个包含一系列初始化器的类模板,它有一个非常小的接口(interface),因为它的唯一目的是用它包含的值序列来初始化另一个对象。不像std::vectorstd::deque , std::initializer_list不打算用作通用容器。

函数LinkedQueue<T>::LinkedQueue(const std::initializer_list<T>&)当有人试图列表初始化 LinkedQueue<T> 时被调用,像这样:

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

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

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

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

这委托(delegate)给默认构造函数来设置类不变量,然后按顺序插入给定的初始化器。

关于c++ - initializer_list 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34957393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com