【发布时间】:2019-01-31 14:41:21
【问题描述】:
与 c++11 一样,我们有两种类型的列表:
std::list<int> lst = { 1, 2, 3, 4, 5 };
std::forward_list<int> flst = { 5, 4, 3, 2, 1};
我们知道list是基于双向链表的,而forward_list是基于单链表的。
我们应该如何决定使用哪一个?上面的任何列表是否有任何性能优势?
【问题讨论】:
-
"Compared to std::list this container provides more space efficient storage when bidirectional iteration is not needed."。因此,如果您已经设置使用链表,并且不需要双向迭代,请选择
std::forward_list,而如果您需要双向迭代能力,请使用std::list。但在做出此决定之前,请确保比较您是否真的需要一个链表,以及连续存储随机访问std::vector或std::array是否是一个可行的替代方案。 -
@Azeem 请注意,该线程中接受的答案非常做作(到了误导的程度),使用 1 字节大小的对象的链表(在这种情况下,
std::list中的附加指针看起来会非常耗费内存)。链接问答中未接受的答案进行了更合理的比较。 -
决定很简单。永远不要使用任何一种。总是有更好的数据结构。嗯,几乎总是。如果您面临使用链表的必要性,那么您正在做一些非常深奥的事情,因此对您没有帮助。
-
@n.m.我不会走那么远,但是是的,你们中的每个人都用“不要使用标准列表”回答了关于标准列表的每个问题,你的准确率会超过 99%。
标签: c++ list c++11 stl forward-list