与 c++11 一样,我们有两种类型的列表:
std::list<int> lst = { 1, 2, 3, 4, 5 };
std::forward_list<int> flst = { 5, 4, 3, 2, 1};
我们知道list是基于双向链表的,forward_list是基于单向链表的。
我们应该如何决定使用哪一个?以上任何列表是否有任何性能优势?
最佳答案
How should we decide which one to used?
决定是否需要双向迭代。如果前向迭代足够好,请使用 std::forward_list
,除非您需要支持早于 C++11 的 C++ 版本,后者可能只有 std::list
。
Is there any performance benefit of any of the list above other?
std::forward_list
消除了每个节点的指针(具有数据缓存和内存子系统的所有附带好处),而 std::list
提供恒定时间迭代器递减。
但在实践中,这两种容器都没有像人们在上计算机科学学校时所相信的那样广泛使用。 std::vector
的实际性能对于许多应用程序来说是优越的,而且它的内存使用量总是较少。需要列表的要求更高的应用程序最好考虑使用标准 C++ 不提供的侵入式列表。
关于c++ - list 和 forward_list 性能之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52015936/