c ++ noob here。 我正在创建一个有限的哈希映射,我将结构存储在向量中,在向量内。 即:
struct bucket{
V value;
std::time_t time;
};
std::vector<std::vector<bucket>> limmap;
template <typename K, typename V>
ece2400::limited_hash_map<K,V>::limited_hash_map::limited_hash_map(std::size_t num_buckets , std::size_t bucket_size){
for(int i = 0; i < num_buckets; i++){
std::vector<bucket> temp(bucket_size);
limmap.push_back(temp);
}
}
谢谢!
答案 0 :(得分:2)
首先,我不知道函数标题是否正确,但考虑到你的问题,让我们假设它是并且它并不重要。
<强> 1。使用数组而不是向量会更好吗?
如果你的意思是C风格的数组,那么我建议你不要使用它们。它是C ++,使用标准库。当然,C风格的数组更快但更容易出错。另一方面,如果你的意思是std::array
,那么答案是否定的(有点)。要创建std::array
对象,描述数组将保持的元素数量的参数必须是编译时知道的(constexpr
)。这可能不适用于您的函数,因为您可以这样调用它:
int bucket_size;
std::cin >> bucket_size; // value not known at compile-time
limited_hash_map(num_buckets, bucket_size);
坚持std::vector
,你就没事了。)
<强> 2。我将如何创建析构函数?
你不需要。 bucket
没有在构造函数中分配任何资源,因此您不需要释放任何内容。最终,矢量将被破坏,当他们这样做时,它们会破坏它们所拥有的所有对象,在你的bucket
个对象中。由于他们不需要任何明确的析构函数,因此它们将被自动销毁,没有任何问题。
希望这会有所帮助:)
答案 1 :(得分:0)
vector
很好地照顾自己。只要V
符合Zero,Three或Five规则,你就不需要在析构函数中做任何事情。这可能允许ece2400::limited_hash_map
利用零规则。