c++ - list 和 forward_list 性能之间的区别?

标签 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};

我们知道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/

相关文章:

c++ - 释放后分配给指针

C++ protobuf 如何设置嵌套结构的值

html - html中的异常空格

c++ - 为什么 shared_ptr 签名与数组的 unique_ptr 不同?

c++ - 这是 "new auto(enum_type)"的 Microsoft VC++ 2010 编译器错误吗

c++ - 虚继承和虚函数使用同一个虚表吗?

c++ - 如何绕过模板化成员函数不能为虚函数的限制进行设计

list - 在 lisp 中展平列表

javascript - 为克隆输入提供输入 'name' 属性,该属性位于列表内

c++ - 将 FILE * stdout 重定向到 C++ 中的字符串