C++ std::forward_列表是否支持手动重新指向?

C++ std::forward_列表是否支持手动重新指向?,c++,linked-list,std,forward-list,C++,Linked List,Std,Forward List,以下是一个很小的问题,以前可能有人问过,但是,我无法通过搜索找到答案 我想做的是使用STD::转发程序列表来实现C++中的“破解编码面试”的一些练习。在我的理解中,链表元素包含a)数据和b)指向下一个元素的指针。有些解决方案需要将“下一个”指针重新指向另一个元素,如下所示(伪代码) 然而,我找不到任何方法来做这件事?我是错过了什么,还是根本不可能 如果有人能给我指出正确的问题,我非常高兴,谢谢 你不能这么做 您缺少的是,标准库容器部分隐藏了它们如何实现的细节。内部“下一步”指针是您不可见的实现细

以下是一个很小的问题,以前可能有人问过,但是,我无法通过搜索找到答案

我想做的是使用STD::转发程序列表来实现C++中的“破解编码面试”的一些练习。在我的理解中,链表元素包含a)数据和b)指向下一个元素的指针。有些解决方案需要将“下一个”指针重新指向另一个元素,如下所示(伪代码)

然而,我找不到任何方法来做这件事?我是错过了什么,还是根本不可能

如果有人能给我指出正确的问题,我非常高兴,谢谢

你不能这么做

您缺少的是,标准库容器部分隐藏了它们如何实现的细节。内部“下一步”指针是您不可见的实现细节。(这与
std::forward_list
没有太大关系,它几乎肯定是一个单链接列表,但它与
std::set
相关:您无法访问内部的红色/黑色字段,而且不同的实现可以使用不同类型的自平衡树。)

删除下两个元素的正确方法是简单地使用
std::forward\u list
的公共API

my_list.erase_after(iterator_to_node);
my_list.erase_after(iterator_to_node);

您不能在
std::forward_list
中手动重新打印,因为它会对您隐藏所有机制。这就是它被创建的原因


相反,您需要在it上执行业务操作。例如,要从列表中删除元素,您需要调用
erase\u after()
-它甚至有一次删除两个Consequitive节点的重载。

您需要使用公共API,否则可能会导致内存泄漏
forward\u list
不提供对指针的直接访问,但在和之间,您可以利用
forward\u list
的帮助以同样的效率完成相同的任务

如果将迭代器
it
放入列表
mylist
,则可以执行相同的逻辑双元素删除操作,以删除两个后续元素:

mylist.erase_after(it, std::next(it, 3));

创建您是为了防止OP在
std::forward_list
中进行手动重新打印:P@MateenUlhaq,我愿意相信我的人生有一个目标:)@SergeyA至少它很容易修复:
std::next(it,3)
@Revolver\u Ocelot,我很清楚这一点。@SergeyA:啊,布莱奇。恼人的是,
forward\u迭代器
不让你,你知道,以一种直截了当的方式前进。固定每@Revolver\u Ocelot。嗯,它允许-只是不在一枪。基本上,这是为了提醒您此操作需要一些时间:)
mylist.erase_after(it, std::next(it, 3));