What does initializer_list do?
What does initializer_list do?
我目前的任务是为教授提供给我们的特殊自定义类创建一个定义;我从未见过initializer_list在使用中,我的教授也没有复习过它。它到底有什么作用?
template<class T>
LinkedQueue<T>::LinkedQueue(const std::initializer_list<T>& il) {
}
我必须定义构造函数,我将自己完成。我只想知道这个参数的作用。另外,我的编译器一直告诉我找不到 std::initializer_list 成员声明。我已经使用 #include 导入了它,但问题仍然存在。
std::initializer_list
是一个包含一系列初始值设定项的类模板,它具有非常小的接口,因为它的唯一用途是使用它包含的值序列初始化另一个对象。与std::vector
或std::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});
初始化必须是相同的类型:不能在初始化列表中混合来自不同类型的值。
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- C++中带有List类的迭代器Segfault
- 使用"std::unordereded_map"映射到"std::list"对象
- GCC对可能有效的代码抛出init list生存期警告
- 使用std::list创建循环链表
- 重载Singly Linked List中的赋值运算符
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- '[](std::list& list)<int>{return std::move(list)}(list)' 是否保证将 'list' 留空?
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 如何使用 do while 循环确定最高值和最低值
- "std::list::splice(std::const_iterator pos, std::list&& other)"是否保证将"其他"留空?
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 包含 std::list 的结构体的 C++ 初始化
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"