【问题标题】:singly linked list in the C++ standard library or other widely-used libraries?C++ 标准库或其他广泛使用的库中的单链表?
【发布时间】:2011-02-17 12:12:14
【问题描述】:

似乎C++标准库中只有双向链表(但没有单链表),对吧?是否有任何广泛使用的带有单链表的 C++ 库?

【问题讨论】:

  • 有什么理由关心底层实现是什么,只要它行为像一个链表吗?只是好奇...
  • @D.Shawley:大多数情况下我只需要单链表,所以我不希望双链表带来的开销。

标签: c++ linked-list singly-linked-list


【解决方案1】:

仅供参考……

时间过去了,C++11 为我们带来了std::forward_list 容器,它被实现为单链表,与 C 中的实现相比,它基本上没有任何开销。

std::list 相比,此容器在不需要双向迭代时提供更节省空间的存储。

警告:缺少push_back 方法(std::forward_list and std::forward_list::push_back

【讨论】:

    【解决方案2】:

    还有slist,这是一个SGI扩展(__gnu_cxx::slist

    #include <iostream>
    #include <iterator>
    #include <ext/slist>
    
    int main(int argc, char** argv) {
      __gnu_cxx::slist<int> sl;
      sl.push_front(1);
      sl.push_front(2);
      sl.push_front(0);
      std::copy(sl.begin(), sl.end(),  // The output is 0 2 1
                std::ostream_iterator<int>(std::cout, " "));
      std::cout << std::endl;
      return 0;
    }
    

    【讨论】:

    • 我更喜欢这个答案,因为我不喜欢导入另一个库,尽管 Greg Hewgill 的答案也是正确的。谢谢各位!
    【解决方案3】:

    Boost 中的 slist 类是一个单链表实现。

    【讨论】:

    • 在 STL 的某些供应商实现中似乎有一个 slist,但在 C++ 标准库中却没有。
    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2020-05-11
    • 2011-06-20
    • 2011-06-28
    • 2020-07-21
    • 2020-03-20
    相关资源
    最近更新 更多