list和forward_list性能之间的区别?

时间:2018-08-25 09:39:24

标签: c++ list c++11 stl forward-list

与c ++ 11一样,我们有两种类型的列表:

std::list<int> lst = { 1, 2, 3, 4, 5 };

std::forward_list<int> flst = { 5, 4, 3, 2, 1};

我们知道该列表基于双链表,而forward_list基于单链表。

我们应该如何决定使用哪个?上面任何一个列表都具有性能优势吗?

1 个答案:

答案 0 :(得分:8)

  

我们应该如何决定使用哪个?

确定是否需要双向迭代。如果正向迭代足够好,请使用std::forward_list,除非您需要支持早于C ++ 11的C ++版本,而C ++ 11可能只包含std::list

  

以上任何列表在性能方面都有好处吗?

std::forward_list消除了每个节点的指针(这为数据缓存和内存子系统带来了所有附带的好处),而std::list提供了恒定时间的迭代器递减。

但是实际上,在上计算机科学学校时,这些容器都没有像人们想象的那样被广泛使用。 std::vector的实际性能在许多应用程序中都非常出色,并且其内存使用量始终很少。要求列表的要求更高的应用程序最好考虑使用标准C ++无法提供的侵入列表。