繁体   English   中英

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

[英]Delete vector of vectors that contain structs

C ++新手在这里。 我正在创建一个有限的哈希图,并将结构存储在向量中的向量中。 即:

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. 我将如何创建析构函数?

谢谢!

首先,我不知道函数头是否正确,但是考虑到您的问题,让我们假设它是正确的也没有关系。

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. 几乎可以肯定。 由于必须动态调整数组大小,因此您将承担许多额外的内存管理职责,以照顾和照顾动态分配。 至少其中一项必须遵守“三或五”规则
  2. vector很好地照顾自己。 只要V符合零,三或五的规则,您就不需要在析构函数中做任何事情。 这可能允许ece2400::limited_hash_map利用零规则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM