如何使用 std::list 作为公开节点的列表的接口的实现?
How to use std::list as the implementation of an interface for a list that exposes the nodes?
我有一个双链表的界面,它暴露了它的边缘。例如:
template <typename T>
class Listnode
{
public:
Listnode *prev;
Listnode *next;
T val;
};
template <typename T>
class List
{
public:
Listnode *head;
Listnode *tail;
// insert, remove, etc.
};
假设外部旧代码使用此接口。
我采用了std::list::sort
的实现并在List
中模仿了它。但是,如果可能的话,最好使用它而不是复制。
问题:是否可以以某种方式使用std::list
来实现List::sort
?特别是,使用std::list::sort
修改List
的ListNode
的prev
-next
指针,以便List
最终排序。好吧,基本上不会在std::list
内复制列表。
我的回答:在我看来,这是不可能的,因为据我在文档中看到的std::list
,除了通过其迭代器遍历它们之外,不会暴露(另请参阅另一个问题(节点之间的边缘,而它的实现std::list::sort
似乎直接修改了边缘,或者至少它与迭代器一起工作,直到调用方法(_M_transfer
(, 就像在 GNU 实现中一样。
但我是初学者。我可能很容易错过一些东西。
你不能std::list
符合你想要做的事情。您可以做的最接近的是让Listnode
类型中的T
成为std::list
中元素的std::list<ActualT>::iterator
。但是,如果此接口由对T
有自己的期望的现有代码使用,则这不是一个真正的选择。
相关文章:
- 删除链接列表中剩余的最后一个节点
- 只有我的"链接列表"中的第一个节点正在打印
- 避免在使用链接列表从 deque 中删除最后一个节点时出现内存泄漏
- 创建附加到每个节点的节点列表 (c++)
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- 如何使用LLVM C++API向保留节点列表添加
- 如何确保我的节点被添加到链接列表中
- Node中的子节点列表在C++中的BFS遍历过程中丢失
- 无法更新属于列表中节点的对象中的值
- 测试列表中节点的删除
- 如何获取列表中有子项的树的节点总和?
- 如何使用 std::list 作为公开节点的列表的接口的实现?
- 在由邻接列表表示的树中查找节点到另一个给定节点之间的路径
- C++ 链表合并排序的实现在连接 1 个以上节点的子列表时失败
- 链接列表中的所有节点都相同,似乎插入不起作用
- C 中的学生指针节点列表中的内存泄漏
- 链接节点列表,分段故障
- 有效删除N- Ary树的节点列表
- 使用 Python API 获取 Maya 中的引用节点列表
- 创建模板树节点列表时出错