如何创建指针链?我想创建具有指向其他对象的指针的对象,该对象具有指针。这有可能吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建指针链?我想创建具有指向其他对象的指针的对象,该对象具有指针。这有可能吗?相关的知识,希望对你有一定的参考价值。
我已经创建了此示例代码,但是我无法使其正常工作。我想从父节点创建子级,这样每个子级都有一个父级,每个子级都有一个指向其父级的指针。第一父级的指针是null指针。现在的问题是,如果我在树分支的尽头,我该如何逐步返回第一个父树,并写下历史记录?
为了简单起见,在此示例中,我创建了带有一条简单路径的线性图。
我发现,如果我想第二次取消引用某个节点的父节点,那么我已经得到了伪造的结果,而且我无法达到第一个父节点的目的。因此,我只能取消引用当前节点的父级。这是为什么?我已经看到在链接列表中人们存储了每个指针,但是我想避免这种情况。目标是,每个节点都存储在list<Node>
中,并且每个节点仅存储其父指针,因此从每个节点中我们都可以追溯到第一个父节点。
#include <iostream>
#include <list>
using namespace std;
struct Node
int node;
Node *parent;
;
void create (Node parent, list<Node>& graph)
if (graph.size() < 10)
Node nn;
nn.node = parent.node+1;
nn.parent = &parent;
graph.push_back(nn);
create(nn, graph);
int main()
list<Node> graph;
Node parent;
parent.node = 0;
parent.parent = nullptr;
graph.push_back(parent);
create(parent, graph);
for (auto i : graph)
cout << i.node << " ";
cout << endl << endl;
auto it = graph.begin();
advance(it, 3);
cout << (*it).node << endl;
cout << (*(*(*it).parent).parent).node;
return 0;
Node
,它应该看起来像这样:void create(Node* parent, list<Node>& graph)
if (graph.size() < 10)
Node* nn = new Node;
nn->node = parent->node + 1;
nn->parent = parent;
graph.push_back(*nn);
create(nn, graph);
但是,这将导致几个问题:
在此行
graph.push_back(*nn);
中,我们取消引用nn
,这会导致不必要地复制int
和Node*
(结构属性)值。由于我们没有在任何地方保存
nn
值,所以导致内存泄漏,因此我们以后不能删除其内容。
Node*
而不是Node
的列表:list<Node*> graph;
这样,我们可以遍历列表并稍后删除动态分配的Node
:
for (auto i : graph)
delete i;
而不是复制int
和Node*
值,我们只是将Node* nn
推送到列表:
graph.push_back(nn);
请注意,it
现在是指向指针的指针,因此需要双重解引用:cout << (**it).node << endl; cout << (*(*(**it).parent).parent).node;
以上是关于如何创建指针链?我想创建具有指向其他对象的指针的对象,该对象具有指针。这有可能吗?的主要内容,如果未能解决你的问题,请参考以下文章