我对指针和数组有一点误解。 当我想创建一个节点数组时,我需要一个指针吗?
是吗
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是一个指针,我明白了。但如果我想动态分配节点,那么我将不得不使用指针。如果是这种情况,那么我如何将节点分配到数组中? 感谢。
答案 0 :(得分:1)
你说你想要一个节点数组,但你真正想要的是一个指针到节点的数组。代码中的 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;
)
答案 1 :(得分:1)
Node* array;
创建一个Node
数组,它将存储Node
的对象,如
int* array;
创建一个存储整数的数组。然而,
Node* newNode = new Node();
当您尝试将指针指向期望new
对象的Node
时, newNode
会返回指向Node
对象的指针,即Node
,你得到那个错误。
假设您的Node
类/结构具有value
和age
成员,您可以执行以下操作:
Node newNode(newNum, 0); //^^call your Node's constructor that takes 2 params
array[top] = newNode;
将Node
的对象放入Node
数组中。您也可以使用STL容器来避免使用动态数组。
答案 2 :(得分:1)
如果您可以使用std::vector
,则可以使用std::vector<Node*> myvector;
(如果您真的需要指针)
然后你可以做myvector.push_back(new Node(...));
不要忘记删除内存,否则你会有内存泄漏,
如果您不关心指针,只需使用以下内容(更干净,无需手动释放内存)
std::vector<Node> myvector;
Node node;
myvector.push_back(node);