0

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

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

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));

还是我在其他地方做错了什么?:(

4

2 回答 2

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.
于 2012-04-15T16:39:10.207 回答
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));

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

于 2012-04-15T16:38:25.383 回答