【问题标题】:Is there a linked list predefined library in C++?C++ 中是否有链表预定义库?
【发布时间】:2010-12-16 15:49:20
【问题描述】:

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

【问题讨论】:

    标签: c++ linked-list abstract-data-type


    【解决方案1】:

    作为daniel notes,是的,std::list。用法是:

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

    等等。

    您可以找到完整的 STL 类列表here。您所追求的部分是 3.2,容器类。 C++ 标准库的另一个有用参考是here

    【讨论】:

    • 这是一个双链表,允许双向遍历,SGI STL(和其他一些)也定义了单链表,例如sgi.com/tech/stl/Slist.html
    • 但是列表中的元素没有关于其前任和继任者的信息......这可能是必需的......
    【解决方案2】:
    #include <list>
    

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

        在 C++ 中,我们有 STL,标准模板库,其中包含许多流行数据结构和算法的实现,例如堆栈、队列、链接列表,甚至还有流行的搜索和排序算法...... ..

        正如 daniel 所说,您可以通过 #include

        包含它

        【讨论】:

          【解决方案5】:

          为了全面了解“常见的链接列表”,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 世界中,使用 range-based for 之类的东西,您通常可以获得比 Java 风格的迭代器更好的语法...而不会牺牲性能。

          因此,虽然这可能值得在我发布时提出完整性,但今天我不太可能提及它。除非您有什么奇怪的理由不这样做,否则只需使用标准库的单链表 (std::forward_list) 或双链表 (std::list)。

          【讨论】:

          • 建议不要使用语言功能...嗯。
          • 不,我建议培养对替代方案的认识(尤其是当许多专业 C++ 程序员在实践中使用这些替代方案时)。
          【解决方案6】:

          我知道这个问题已经很老了,无论如何也许值得更新它,因为当您查找 STD 和链表时,它会出现在搜索结果中:

          除了其他人已经说过的(使用std::list 表示双链表),对于单链表的最常见用例,应该首选std::forward_list,因为它针对单链表进行了优化- 链表。

          【讨论】:

            猜你喜欢
            • 2013-11-14
            • 1970-01-01
            • 1970-01-01
            • 2011-09-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多