简单链接列表:
struct Node {
int x;
Node *next;
};
使用STL的用户定义的简单链接列表和列表容器有哪些主要优点/缺点?具有大量数据的LL的列表性能怎么样?
答案 0 :(得分:7)
在大多数情况下,最好使用标准容器,因为它们在程序员中经过测试和熟知。考虑到标准C ++库有自己的单个链表,名为
std::forward_list
因此,您的问题可以说是使用用户定义的单个链接列表或std::forward_list
更好的问题。我建议使用std::forward_list
尽管如此,标准C ++库需要一个方法push_back
的链表。并且I already suggested that the C++ Committee should add such a container to the C++ standard library。我甚至给它起了个名字! :)
std::x_forward_list
答案 1 :(得分:5)
从表面上看,这个问题可能看起来很简单,回答“std::list
更安全,更有效,等等等等。”
但这些方面无关紧要。
std::list
通常没有其他标准库容器的优势。直到并包括C ++ 03,可以提供恒定的时间拼接,具体取决于实现。但是,在C ++ 11中,通过要求size()
为常量时间(你可以有一个或另一个是恒定时间,但不是两者),可以取消这种可能的优势。
因此,如果您需要持续时间拼接或链接列表的其他可能优势,则 使用std::list
之外的其他内容。
例如,你的DIY本土名单。
恒定时间要求:C ++11§23.2.1/ 4表96:
“
a.size()
size_type
distance(a.begin(), a.end())
常数
其中列是表达式,返回类型,操作语义和复杂性。
答案 2 :(得分:2)
就我个人而言,我发现只使用STL容器比使用链接列表设计链表更有效率。这可能是最好的好处。时间就是金钱。
答案 3 :(得分:1)
STL是标准的,有大量文档记录,已经存在且已经使用和测试,它是通用的,适用于大多数类型,STL容器的性能通常是标准的一部分,因此您将获得标准或更好。
本土列表可以根据您的需求进行专门定制,在某些情况下,可以让您根据数据的任何独特方面获得性能提升,但无法保证,性能仅与您一样好自己动手制作数据。您必须执行自己的测试并编写自己的实现。