如何创建指针链?我想创建具有指向其他对象的指针的对象,该对象具有指针。这有可能吗?

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,这会导致不必要地复制intNode*(结构属性)值。

    由于我们没有在任何地方保存nn值,所以导致内存泄漏,因此我们以后不能删除其内容。
  • 最好保留Node*而不是Node的列表:
  • list<Node*> graph;

    这样,我们可以遍历列表并稍后删除动态分配的Node

    for (auto i : graph)
        delete i;
    

    而不是复制intNode*值,我们只是将Node* nn推送到列表:

    graph.push_back(nn);
    


    请注意,it现在是指向指针的指针,因此需要双重解引用:
    cout << (**it).node << endl; cout << (*(*(**it).parent).parent).node;
  • 以上是关于如何创建指针链?我想创建具有指向其他对象的指针的对象,该对象具有指针。这有可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

    从 2D 向量创建 1D 向量的函数(错误:表达式必须具有指向对象的指针类型)

    如何创建一个存储指向成员函数的指针的类 (C++)

    指向具有私有构造函数的类的类成员的指针

    如何创建指向继承类对象的指针数组

    当向量在内部类中时,如何删除指向对象的向量指针

    包含指向其他结构的指针的结构