C++中是否有预定义的链表库?

26

在C ++中是否有我可以直接#include的链表?或者如果我想使用链表,是否需要创建自己的链表?

6个回答

49

正如丹尼尔所指出的,是的,std::list。使用方法应该是:

#include <list>
// ...
std::list<int> listOfInts;
listOfInts.push_back(1);
// ...

等等。

您可以在此处找到完整的STL类列表。您需要查找的部分是3.2,容器类。另一个有用的C++标准库参考资料在此处


1
这是一个双向链表,可以进行双向遍历。SGI STL(和其他一些库)还定义了单向链表,请参见http://www.sgi.com/tech/stl/Slist.html。 - Matthieu M.
1
但是列表中的元素没有关于其前任和后继的信息...这可能是必需的... - Offirmo

14
#include <list>

5
在C++中,我们拥有STL(标准模板库),其中包含了很多流行数据结构和算法的实现,例如栈、队列、链表以及各种常见的搜索和排序算法等等。
正如daniel所说,你可以使用#include<list>来包含它。

4
为了完善对“常见链接列表”的认识,Qt库将其自己的QLinkedList定义为其容器类(QMap、QString等)的一部分。
它们支持标准迭代器和Java-Style Iterators,后者具有易于使用的语法:
QLinkedList<QString> list;
list << "A" << "B" << "C" << "D";

QListIterator<QString> i(list);
while (i.hasNext())
    qDebug() << i.next();

更新:我最初在2009年发布了这篇答案,以引起人们对Qt类的关注。在C++11之后,有了像基于范围的for这样的东西,你通常可以获得比Java风格迭代器更好的语法...而不会牺牲性能。

因此,尽管当我发布时可能值得提一下,但今天我不太可能再提到它。除非你有某种奇怪的原因不想这样做,否则只需使用标准库的单向链表(std::forward_list)或双向链表(std::list)即可。


1
不建议使用语言特性...嗯。 - GManNickG
不,我建议你要对其他选择有一定的了解,尤其是那些在实际中被许多专业的C++程序员使用的替代方案。 - HostileFork says dont trust SE

4

{{链接1:STL列表}}


3
我知道这个问题相当古老,但也许更新一下会更有价值,因为当你搜索STD和链表时,它出现在搜索结果中:
除了其他人已经说过的(使用std::list来实现双向链表),对于最常见的单向链表用例,应该优先选择std::forward_list,因为它专门针对单向链表进行了优化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接