Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::forward_list-如何在末尾插入元素_C++_C++11_Stl - Fatal编程技术网

C++ std::forward_list-如何在末尾插入元素

C++ std::forward_list-如何在末尾插入元素,c++,c++11,stl,C++,C++11,Stl,转发列表是一个单链表(与标准列表容器不同)。list有前后插入的函数,但forward\u list没有在后面插入元素的函数(类似于push\u back)。为什么不能在列表的后面插入一个元素?这是一个经过深思熟虑的设计决策,与单链接列表相比,转发列表不应带来任何开销。这在C++11标准(23.3.4.1)中有所说明: 注意:forward\u list相对于手写的C样式单链接列表,其空间或时间开销为零。与该目标冲突的功能已被省略 将指针保持在列表末尾会增加空间开销(指针本身)和时间开销(在列表

转发列表是一个单链表(与标准列表容器不同)。list有前后插入的函数,但forward\u list没有在后面插入元素的函数(类似于push\u back)。为什么不能在列表的后面插入一个元素?

这是一个经过深思熟虑的设计决策,与单链接列表相比,
转发列表
不应带来任何开销。这在C++11标准(23.3.4.1)中有所说明:

注意:
forward\u list
相对于手写的C样式单链接列表,其空间或时间开销为零。与该目标冲突的功能已被省略


将指针保持在列表末尾会增加空间开销(指针本身)和时间开销(在列表末尾插入或删除元素时更新指针)。

@ALJIMohamed我希望我可以对注释进行向下投票,因为这是一个O(N)操作。它必须从前面开始,一步一步走到后面。可能列表后面的多余部分不是开始。您询问的是在列表后面插入一个元素(尽管问题标题表明不是这样)。后面是列表的结尾,而不是开始。你只有开始的把握
std::forward_list
的设计非常简单,因此它不包含任何会使插入到后端的数据变得高效的数据。这是相当误导的。对于一个单链接的列表来说,保持一个指向列表末尾的指针,或者有一个额外的变量来容纳大量的项目或其他内容,这是完全正确的。与具有相同功能的“手写C风格单链接列表”相比,将它们放在
转发列表中不会增加任何开销。