【问题标题】:Best OS agnostic way to implement doubly linked list in C++在 C++ 中实现双向链表的最佳操作系统无关方法
【发布时间】:2017-06-22 09:42:40
【问题描述】:

我想在我的 c++ 代码中使用双向链表,该代码需要在所有操作系统(windows、linux、MAC、android)上都可移植。 我在网上读到 std::list 可以表示一个双向链表。

有几个问题,例如: 1)这个操作系统是不可知的吗?它属于 STL 吗? 2) 是否有任何先进的 C++ 表示双重列表的机制?

我的链表节点是这样的:

struct LinkedListNode
{
   LInkedList* prev;
   LInkedList* next;
   struct data
   {
    //    vectorA[]
     //  vectorB[]
     // 2D vectors
     // strings
     // bool bflag
   }
}

【问题讨论】:

  • std::list<T> 是标准的一部分。
  • std::list<T> 是标准库的一部分,因此它带有任何符合 C++ 的实现。它不一定是一个双链表(即使它经常被实现为一个),但它具有相同的属性,并且它可能比使用手动分配的自制实现更有效/安全/其他...
  • 实际上,由于缓存未命中,链表在现代机器上效率极低。 Bjarne 说不要使用 - 通常一个向量会更快,即使理论上对于 Big O 来说更糟。

标签: c++ c++11 stl linked-list c++14


【解决方案1】:

我在网上看到 std::list 可以表示一个双向链表

这正是 std::list 的含义。

1) 这个操作系统是否与操作系统无关?

您展示的代码不使用任何操作系统特定的 API,因此它与操作系统无关。

它属于 STL 吗?

STL 中有一个双链表。 C++ 标准库中也有一个:std::list。 std::list 的 API 与 STL 列表的 API 相同。前者毕竟是基于后者的。

2) 是否有任何先进的 C++ 表示双重列表的机制?

有std::list。

【讨论】:

    猜你喜欢
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多