这里是c++ noob。我正在创建一个有限的散列映射,并将结构存储在向量中,在向量中。即:
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);
}
}谢谢!
发布于 2018-04-16 20:26:05
首先,我不知道函数头是否正确,但是考虑到您的问题,让我们假设它是正确的,这并不重要。
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对象。因为他们不需要任何明确的析构函数,他们将自动销毁,没有任何问题。
希望这会有所帮助:)
发布于 2018-04-16 20:15:15
vector很好地照顾自己。只要V符合零规则,那么在析构函数中,您就需要完全不做任何操作。这可能允许ece2400::limited_hash_map利用零规则。https://stackoverflow.com/questions/49865322
复制相似问题