我目前正在自学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));
或者我在其他地方做错了什么? :(
答案 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));
它会分配内存,但不会创建对象,因为它不会调用它的构造函数。