与c ++ 11一样,我们有两种类型的列表:
std::list<int> lst = { 1, 2, 3, 4, 5 };
std::forward_list<int> flst = { 5, 4, 3, 2, 1};
我们知道该列表基于双链表,而forward_list基于单链表。
我们应该如何决定使用哪个?上面任何一个列表都具有性能优势吗?
答案 0 :(得分:8)
我们应该如何决定使用哪个?
确定是否需要双向迭代。如果正向迭代足够好,请使用std::forward_list
,除非您需要支持早于C ++ 11的C ++版本,而C ++ 11可能只包含std::list
。
以上任何列表在性能方面都有好处吗?
std::forward_list
消除了每个节点的指针(这为数据缓存和内存子系统带来了所有附带的好处),而std::list
提供了恒定时间的迭代器递减。
但是实际上,在上计算机科学学校时,这些容器都没有像人们想象的那样被广泛使用。 std::vector
的实际性能在许多应用程序中都非常出色,并且其内存使用量始终很少。要求列表的要求更高的应用程序最好考虑使用标准C ++无法提供的侵入列表。