C++分配节点指针
C++ allocating node pointers
我正在使用不相交集合和联合/查找操作制作一个C++迷宫程序。
我有一个MakeSet(int x)
函数,它为迷宫中的每个整数元素 x 创建一个新节点。 (即 4x4 迷宫的1 to 16
)。因此,最初每个元素都在自己的集合中。
我的制作集看起来像这样
void Maze::MakeSet(int x)
{
Node *root = new Node;
root->label = x;
root->parent = NULL;
}
但是在 CreateMaze() 函数中,我必须多次调用 MakeSet 才能将所有元素最初放入自己的集合中。因此,根将继续被覆盖。如何动态分配许多不同的节点?我应该将它们分开在一个数组中吗?
您已经分配了一个新的Node
,只是没有保留它。您需要更改函数以返回 Node*
,并将结果存储在数组或向量中。
Node* Maze::MakeSet(int x) {
Node *root = new Node;
root->label = x;
root->parent = NULL;
return root;
}
Node *nodes[16];
for (int i = 0 ; i != 16 ; i++) {
nodes[i] = Maze::MakeSet(i);
}
更好的方法是在构造函数中执行Node
初始化:
Node::Node(int x) : label(x), parent(NULL) {
}
您现在可以在一个循环中创建所有集合,并将指向它们的指针存储在数组中:
Node *nodes[16];
for (int i = 0 ; i != 16 ; i++) {
nodes[i] = new Node(i);
}
<</div>
div class="answers">您可以将Node
对象或指针std::vector
作为类成员:
class Maze
{
std::vector<Node> nodes;
};
或者,如果您必须
class Maze
{
std::vector<Node*> nodes;
}
并添加创建的节点:
void Maze::MakeSet(int x)
{
Node *root = new Node;
root->label = x;
root->parent = NULL;
nodes.push_back(root);
}
请注意,完成后,必须实现析构函数来清理内存。这也意味着您应该有一个用于 Maze
的复制构造函数和赋值运算符。
相关文章:
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 指向二叉树中新节点的指针
- C++创建指向有向图中节点的指针数组
- 使用函数引用指向节点的指针删除链表中的节点?
- 函数无法识别我在C++传递节点指针向量?
- 如果我们不创建一个新节点并使用指针插入数据并建立链接(在链表中)怎么办?
- 如何在单个链表中交换两个节点的位置,只修改指针
- C++中是否有一个函数可以为您获取指向该节点的所有指针的地址空间
- 如何删除由节点组成的树,并相互指向彼此的指针?
- 具有 4 个指针的节点的递归插入函数返回 null
- 如何使用指针连接两种不同的节点类型(结构)?
- C 中的学生指针节点列表中的内存泄漏
- 如果我删除指向节点的指针数组,节点本身是否会被删除
- 交换树数据结构中根的 2 个子节点指针
- 使用指针打印链表中的节点
- 我们不能在不使用指向对象的指针的情况下创建节点C++吗?
- C 指针节点帮助 - 将参数复制到链接的列表节点更改该节点的不同部分
- C++指针节点
- 括号和指针节点