首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除包含结构的向量的向量

删除包含结构的向量的向量
EN

Stack Overflow用户
提问于 2018-04-16 20:01:27
回答 2查看 259关注 0票数 1

这里是c++ noob。我正在创建一个有限的散列映射,并将结构存储在向量中,在向量中。即:

代码语言:javascript
复制
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);
    }
}
  1. 用数组代替向量会更好吗?
  2. 我该如何创建析构函数?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-04-16 20:26:05

首先,我不知道函数头是否正确,但是考虑到您的问题,让我们假设它是正确的,这并不重要。

1.使用数组而不是向量更好吗?

如果你指的是C型数组,那么我建议不要使用它们。这是C++,使用标准库。当然,C样式数组速度更快,但更容易出错。另一方面,如果你指的是std::array,那么答案是否定的。要创建std::array对象,描述数组将包含的元素数量的参数必须是已知的编译时(constexpr)。这在您的函数中可能不起作用,因为您可以这样称呼它:

代码语言:javascript
复制
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对象。因为他们不需要任何明确的析构函数,他们将自动销毁,没有任何问题。

希望这会有所帮助:)

票数 2
EN

Stack Overflow用户

发布于 2018-04-16 20:15:15

  1. 几乎可以肯定不是。因为数组必须是动态大小的,所以您将承担许多额外的内存管理职责,以照顾和补充该动态分配。其中最不重要的是必须遵守三五法则
  2. vector很好地照顾自己。只要V符合零规则,那么在析构函数中,您就需要完全不做任何操作。这可能允许ece2400::limited_hash_map利用零规则。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49865322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档