gpt4 book ai didi

c++ - 双向链表中的成员访问

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:50 25 4
gpt4 key购买 nike

我目前正在阅读 Programming: Principles and Practice using C++ 的第 17 章,但我想不通。在下面的代码中,行是什么norse_gods->succ->prev = norse_gods 实际上是做什么的?我知道 -> 是一个成员访问运算符,给定一个指向对象的指针。这是否意味着我正在访问 norse_gods 继任者前任?我对此有点困惑。这只是第一部分,稍后在本书中定义了一个插入操作,它使用相同的符号,所以我想知道它到底是什么意思。感谢您的宝贵时间。

代码如下:

struct Link {
string value;
Link* prev;
Link* succ;
Link(const string& v, Link* p = nullptr, Link* s = nullptr)
: value(v), prev(p), succ(s) {}
};

//insert n before p (incomplete)
Link* insert(Link* p, Link*n)
{
n->succ = p;
p->prev->succ = n;
n->prev = p->prev;
p->prev = n;
return n;
}

int main()
{
//Building a list of Norse gods
// val prev suc
Link* norse_gods = new Link{ "Thor", nullptr, nullptr };
norse_gods = new Link{ "Odin", nullptr, norse_gods };

norse_gods->succ->prev = norse_gods;
norse_gods = new Link{ "Freya", nullptr, norse_gods };

norse_gods->succ->prev = norse_gods;


}

最佳答案

这个:

Link* norse_gods = new Link{ "Thor", nullptr, nullptr };

创建了一个具有 NULL 后继者和前任者的节点。现在我们在开头附加第二个节点:

norse_gods =       new Link{ "Odin", nullptr, norse_gods };

请注意 norse_gods 中的前一个节点 Thor 作为继任者附加。所以现在我们有

Odin -> Thor

但是Thor的前驱指针还是NULL!我们没有碰它!但我们现在知道它是奥丁。因此,让我们修复它以指向 Odin,它当前由 norse_gods 指向:

norse_gods->successor /*Translates to Odin's successor, which is Thor*/ ->predecessor /*This is still null from the first line*/ = /*So fix it to point to the current norse_gods, Odin*/ = norse_gods /*pointing to Odin*/

所以现在链接固定了,雷神的前身是奥丁,理所当然。

关于c++ - 双向链表中的成员访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44589999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com