gpt4 book ai didi

c++ - 如何在具有依赖元素类型的模板类构造函数中初始化 vector

转载 作者:行者123 更新时间:2023-11-28 00:43:22 25 4
gpt4 key购买 nike

这是我的模板类及其构造函数的代码。我无法初始化其元素为复杂模板类型的 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/

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