如何调整动态模板数组的大小?

时间:2016-07-04 23:44:27

标签: c++ arrays templates dynamic-arrays template-classes

我有一个动态模板数组作为我的类的成员。但是,我无法在构造函数或任何其他函数中调整数组的大小。我对语法感到困惑。这是代码:

template <class Type> class MaxHeapTree {
private:
    HeapNode<Type> *array[];
    HeapNode<Type> *root;
    int elementSize;
    int height;
    int leafCounter;
public: 
    // Constructor
    MaxHeapTree(int n = 10) : elementSize(0), height(0), leafCounter(0) {
        HeapNode<Type> *array = new HeapNode<Type>[n];
    }

该数组是HeapNode类中包含的HeapNode<Type>个对象数组。这是HeapNode类的构造函数:

template <class Type> class HeapNode {
private:
    int key;
    Type value;
public:
    HeapNode(int key, Type const &value) {
        this->key = key;
        this->value = value;
    }

2 个答案:

答案 0 :(得分:2)

显示的代码存在多个问题。

HeapNode<Type> *array[];

如上所述,应该声明这一点,简单地说:

HeapNode<Type> *array;

然后,在构造函数中:

HeapNode<Type> *array = new HeapNode<Type>[n];

这在构造函数中声明了一个名为&#34; array&#34;的变量。这对于初始化该名称的类成员绝对没有任何作用。构造函数应该只是:

MaxHeapTree(int n = 10) : array(new HeapNode<Type>[n]), elementSize(0),
                          height(0), leafCounter(0)
{
}

据推测,数组的大小n也应该存储在某个地方。但问题中没有显示那部分。

此外,我还要质疑在这里使用动态分配的必要性。我在这里看不到任何使用std::vector代替动态分配的数组无法实现的功能。现代C ++代码很少需要newdelete任何东西,尤其是数组。在大多数情况下,标准C ++容器消除了动态分配的需要。如果从一开始就使用std::vector,那么这个问题就不会发生在第一位。

答案 1 :(得分:1)

使用容器进行管理:

std::vector<HeapNode<Type>> array
相关问题