简单链表Vs STL :: list。哪一个最好?

时间:2014-10-30 18:25:50

标签: c++ stl linked-list

简单链接列表:

struct Node { 
int x;
Node *next;
};

使用STL的用户定义的简单链接列表和列表容器有哪些主要优点/缺点?具有大量数据的LL的列表性能怎么样?

4 个答案:

答案 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容器的性能通常是标准的一部分,因此您将获得标准或更好。

本土列表可以根据您的需求进行专门定制,在某些情况下,可以让您根据数据的任何独特方面获得性能提升,但无法保证,性能仅与您一样好自己动手制作数据。您必须执行自己的测试并编写自己的实现。