1

我对指针和数组有一点误解。当我想创建一个节点数组时,我需要一个指针吗?

是吗

Node* array;
array = new Node[size];

当然问题是当我想将节点分配到数组中时

void Class::enqueue(int newNum)
{

    Node* newNode = new Node();
    newNode->value = newNum;
    newNode->age = 0;

    if (isFull())
        resize();
    top++;
    array[top] = newNode; // ERROR. does this have to be a pointer?
}   

newNode 是一个指针,我理解。但是如果我想动态分配一个节点,那么我将不得不使用一个指针。如果是这种情况,那么我将如何将节点分配到数组中?谢谢。

4

3 回答 3

2

你说你想要一个节点数组,但似乎你真正想要的是一个指向节点的指针数组。代码中的newNode是一个指针,因此该数组应该能够保存Node. 将您的数组定义为:

Node** array;
array = new (Node*)[size];

记住在不再需要时释放内存:

delete []array;

您还可以使用以下数组Node

Node* array;
array = new Node[size];

...
Node *newNode = new Node();
...
array[top] = *newNode; // dereference the pointer

但是您应该小心,因为这样节点的内容将被复制到数组单元格中。然后会有两个独立的对象,持有相同的数据。您不能使用数组的内容来操作原始节点。

我猜你真的需要一个指向节点的指针数组: vector<Node*> v;) (或者正如比尔所说,一个指针向量:)

于 2013-05-06T03:49:27.800 回答
1
Node* array;

创建一个 的数组Node,它将存储 的对象Node,例如

int* array;

创建一个存储整数的数组。然而,

Node* newNode = new Node(); 

new返回指向 的对象的指针Node,即 ,newNode当您尝试将指针放入Node期望 的对象时Node,您会收到该错误。

假设您的Node类/结构具有valueage成员,您可以执行以下操作:

Node newNode(newNum, 0); //^^call your Node's constructor that takes 2 params
array[top] = newNode;

将对象Node放入您的数组中Node。您还可以使用 STL 容器来避免使用动态数组。

于 2013-05-06T03:50:14.683 回答
1

如果你可以使用std::vector,你可以使用std::vector<Node*> myvector;(如果你真的想要指针)

然后你可以myvector.push_back(new Node(...));不要忘记删除内存,否则你会有内存泄漏,

如果您不关心指针,只需使用以下内容(更清洁,无需手动释放内存)

std::vector<Node> myvector;
Node node;
myvector.push_back(node);
于 2013-05-06T03:50:46.197 回答