引用可以替换指针吗?
Can references replace pointers?
更具体地说,我想知道为什么我们在典型的链表实现中使用指针。节点的以下实现是否可能导致任何问题?
template <typename T>
class Node {
T data;
Node<T>& next;
Node<T>& prev;
};
有什么理由我们应该在这里使用指针而不是引用吗?
创建引用后无法设置引用,这使得不可变的链接列表实现有些棘手。(您需要将引用包装在对象中,以便在要更改引用时重新装箱)。
也无法在引用上设置 NULL 值,因此表示列表的末尾需要一些想象力。
可能最好坚持使用链表中的指针,或者更好的是,使用 std::list<>
.
Lvalue 引用不能替换指针;它们执行不同的事情。
左值引用必须使用左值初始化,并且左值引用将在其剩余的生存期内引用该对象。它不能反弹。这会给列表节点带来两个直接问题。
你如何开始列表?您希望构造一个没有"上一个"的节点,但必须使用 Node
对象初始化prev
成员。你可以想象使用一个Node
,其prev
是自己来表示列表的头部,但这正在解决左值引用的糟糕选择。(例如 Node<T> emptylist = { T(), emptylist, emptylist }; //eurgh
)
第二,你如何操纵名单?您无法更改next
和prev
的绑定,这意味着更改列表的唯一方法是构造一组全新的节点并复制每个data
元素。
相关文章:
- 模板参数推导/替换失败,lambda作为函数指针
- 如何在C++代码中灵活使用和替换标准::shared_ptr或标准::unique_ptr或原始指针?
- 如何在不更改现有函数语法的情况下将普通指针替换为共享指针
- 使用malloc和指针替换矩阵中的向量
- 优化替换共享指针内容时对分配器的调用
- 在 C++11 中将函数指针替换为模板
- C++正则表达式库,替换为函数指针
- 引用可以替换指针吗?
- 搜索并替换为指针
- 有没有更惯用的方法来替换指针
- 使用指针将输入中的空格替换为破折号符号
- 用指针替换循环索引器有什么好处吗?
- 我是否可以使用用户定义的转换将原始指针访问替换为通过类访问
- 在字符指针中用内存移动替换字符
- C++:将'this'指针与"get"函数一起使用以替换 cout 语句的可能性
- 将参数中的静态函数指针替换为实例中方法的指针
- 替换共享指针的内容
- C++程序员用C#中的指针替换
- 将树的每个节点替换为节点左侧所有值的和,而不使用额外的整数指针参数
- 使用指针替换 cpp 中字符串中的字符