gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:42:17 26 4
gpt4 key购买 nike

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

最佳答案

看起来像

  • 这是一个双向链表。
  • 迭代器是一个类。
  • Node 也是一个类。
  • x 是要插入的值。
  • Node 是一个聚合,它具有三个数据成员,顺序为 valueprevnext 或或者有一个按此顺序接受三个参数的构造函数。
  • p 是指向新节点应位于其之前的 Node 的指针。

基于这些假设:

  • new Node{ x, p->prev, p } new创建一个新节点,将其值设置为x,其前一个节点为 p->prev,下一个节点为 p。它返回一个指向这个新节点的指针。
  • p->prev->next =/*...*/ 设置 p->prevnext - 即p 之前的节点 - 指向这个新创建的节点。该表达式的值是分配的值(正式来说,它是一个引用 p->prev->next 的左值,然后将其转换为右值,即读取存储的值),即指向新节点的指针。
  • p->prev =/* ... */ 最终使 p->prev 也指向这个新节点。该表达式的结果又是指向新节点的指针。最终结果是新节点插入到p之前。
  • 最后,iterator(/* ... */) 构造一个指向新节点的迭代器,return 将其返回给调用者。

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

关于c - 解释数据结构中以下 return 语句的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26201011/

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