【问题标题】:struct node vs std::list< >结构节点与 std::list< >
【发布时间】:2015-04-20 15:08:53
【问题描述】:

在尝试理解链表时,我遇到过这种或类似的方式来构建链表:

typedef struct node{
    int data;
    node *next;
}node;

node* init(int a[], int n){
    node *head, *p;
    for(int i=0; i<n; ++i){
        node *nd = new node();
        nd->data = a[i];
        if(i==0){
            head = p = nd;
            continue;
        }
        p->next = nd;
        p = nd;
    }
    return head;
}

但是为什么要使用它而不是 std::list<..> 呢?

【问题讨论】:

  • 为什么这个 typedef 也是一个名为 'node' 的结构的 'node'?
  • 我投票结束这个问题,因为没有“正确”的答案。我猜想实现单链表而不是使用std::list 作为练习很有用,并理解为什么std::list 上的某些算法复杂性(例如插入是恒定的,查找是线性的)是它们的方式。 typedef struct node 部分看起来很像这是基于一些 C 代码。
  • 在生产代码中确实没有理由。了解链表如何在后台工作通常是一种学习练习。
  • 这是一个单链表,所以直接对应的是C++11std::forward_liststd::list 是一个双向链表。

标签: c++ linked-list nodes stdlist


【解决方案1】:

因为这种方式它也可以在 C 中工作。

这在您编写可用于 C 和 C++ 的库时很有用。

也可能是代码以前是 C,然后转移到 C++ 以在代码的其他部分使用某些 C++ 功能。

【讨论】:

    【解决方案2】:

    由于您已标记问题 C++ 而不是 C,因此最理智的答案

    但是为什么要使用这个而不是 std::list<..>

    如果您可以使用标准库及其单链表类模板std::forward_list,您不会。例如,某些嵌入式环境可能允许您使用 C++ 及其大部分功能,但不能使用标准库的全部。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2018-06-11
      • 2014-06-21
      • 1970-01-01
      相关资源
      最近更新 更多