在数据结构中解释以下return语句的最佳方法是什么?

时间:2014-10-05 08:40:42

标签: c data-structures

(p->prev = p->prev->next = new Node{x, p->prev, p})是C ++代码段中的return语句。它用于在列表中插入新节点。我不太明白如何在一个单一的声明中有两个相等的运算符。

1 个答案:

答案 0 :(得分:3)

看起来像

  • 这是一个双重链接列表。
  • iterator是一个班级。
  • Node也是一个类。
  • x是要插入的值。
  • Node是一个聚合,其中包含valueprevnext的三个数据成员,或者具有按此顺序获取三个参数的构造函数。
  • p是指向新节点之前的Node的指针。

根据这些假设:

  • new Node{ x, p->prev, p } new启动新节点,将其值设置为x,将其上一个节点设置为p->prev,将其下一个节点设置为p。它返回一个指向这个新节点的指针。
  • p->prev->next = /*...*/设置next的{​​{1}} - 即之前p->prev之前的节点 - 指向这个新创建的节点。此表达式的值是指定的值(正式地,它是一个引用p的左值,然后转换为右值,即读取的存储值),这是指向新值的指针节点
  • p->prev->next最终使p->prev = /* ... */也指向此新节点。此表达式的结果再次是指向新节点的指针。最终结果是在p->prev之前插入新节点。
  • 最后,p构造一个指向新节点的迭代器,iterator(/* ... */)将其返回给调用者。

不应该使用这样的代码。它可能看起来很可爱"但它很难阅读和理解,当我读到它时我的第一反应是#34;你确定它不是未定义的行为" ;?我花了一些时间来说服自己行为是明确定义的(至少在C ++ 11中)。