我从一些算法书籍中读到了一个Queue的实现,有一个对我来说是新的/有趣的片段,我不明白。我认为它是像C ++ 11中的向量初始化列表一样的新东西,但由于代码的上下文,我不是那么自信。任何人都可以曝光或提供一些参考吗?
template <typename T>
class Queue {
private:
size_t head, tail, count;
vector<T> data;
public:
Queue(const size_t &cap=8) : head(0),tail(0),count(0),data({cap}) {}
//... more interfaces
//...
}
可疑部分是数据({cap}),这是什么?它将矢量调整为容量上限? (显然,代码的作者打算在构造数据时给出数据大小。)
编辑: 在阅读完第一个答案并进行测试后,我们知道该书在代码段中有错误。它打算给出一个初始上限,但它使用了错误的{}。
答案 0 :(得分:4)
这是统一初始化,一种新的C ++ 11功能。但是,它可以说是在你的例子中以正确的方式使用。它应该是:
Queue(const size_t &cap=8) : head(0),tail(0),count(0),data(cap) {}
// ^^^^^
因为目的是调用接受向量初始大小的std::vector<>
构造函数。以这种方式调用它:
data{cap}
或者这样:
data({cap})
使构造函数接受std::initializer_list
被选中(初始化列表是C ++ 11的另一个新特性,与大括号初始化紧密相关),导致向量初始化为一个元素,其值为{{ 1}}。
您可以在此live example中验证上述声明(代码在下面报告):
cap