作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的模板类及其构造函数的代码。我无法初始化其元素为复杂模板类型的 vector 。
template <class Key, class Obj>
class HashTable{
typedef int T;
typedef pair<const Key, Obj> Entry;
typedef list<Entry> Bucket;
typedef vector<Bucket> BktArray;
private:
T n, nbuckets;
BktArray a;
public:
HashTable(T capacity = 199){
n = 0;
nbuckets = capacity;
Bucket b();
a = vector<Bucket>(capacity, b);
}
};
我在行中收到“没有匹配的调用函数”:
a = vector<Bucket>(capacity, b);
我想初始化 vector 以包含“容量”元素。
最佳答案
Bucket b();
声明了一个名为 b
的函数,它返回一个 Bucket
实例。这不是你想要的(因此类型不匹配)。 b
也是不必要的,没有它的 vector
构造函数会做正确的事情(=它默认构造它的元素)。
更一般地说,你绝对应该在这里使用初始化列表。因此,重写您的代码如下:
HashTable(T capacity = 199)
: n(), nbuckets(capacity), a(vector<Bucket>(capacity))
{ }
此外,将 T
作为 int
的类型别名会产生误导,我不推荐这样做。此上下文中的标准类型名称是 size_type
,但它应该是 unsigned 类型,而不是 (signed
) int
.
关于c++ - 如何在具有依赖元素类型的模板类构造函数中初始化 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17642821/
我是一名优秀的程序员,十分优秀!