C ++模板化类的动态数组(即向量)

时间:2012-04-15 16:31:54

标签: c++ arrays templates dynamic

我目前正在自学C ++并尝试实现一个简单的hashmap(带有两个模板类)。

但是,我无法弄清楚如何正确初始化动态矢量数组。 我的尝试失败了:

std::vector<Key> *keys = new std::vector<Key>[size];
std::vector<Key> *keys = (std::vector<Key> *) malloc(sizeof(std::vector<Key>) * size);
std::vector<Key> **keys = reinterpret_cast<vector<Key> **>(malloc(sizeof(vector<Key>) * size));

或者我在其他地方做错了什么? :(

2 个答案:

答案 0 :(得分:1)

您正在做的事情是不必要的,矢量支持动态调整大小,您不需要new它。

所以:

std::vector<Key> keys = std::vector<Key>(size); // is fine to initialise the vector to a specific size.

如果你想要一个指向矢量的指针那么你就可以这么新了

std::vector<Key>* keys = new std::vector<Key>(size);

此外,您可以随时根据需要添加和删除元素,并在必要时调整大小,或者您可以强制它:

keys.resize(newSize); // note that if the new size is larger than current size
// it will default fill the new elements so if your `vector` is of `ints` 
// then it will pad with zeros.

答案 1 :(得分:0)

你应该这样做:

std::vector<Key> *keys = new std::vector<Key>(size);

即使其中一次尝试有效:

std::vector<Key> *keys = (std::vector<Key> *) malloc(sizeof(std::vector<Key>) * size);
std::vector<Key> **keys = reinterpret_cast<vector<Key> **>(malloc(sizeof(vector<Key>) * size));

它会分配内存,但不会创建对象,因为它不会调用它的构造函数。