链表第一个节点结构的成员变量总是下一个节点

时间:2013-05-08 12:17:23

标签: c++ linked-list

假设您有一个如下定义的节点链接列表:

C ++代码

struct node {
    node *next;
    int i ;
};

将下一个指针作为结构的第一个成员变量有什么好处?

我认为人们通过上述方法尝试这个(我可能在这里错了)

node n, m;
*n=&m;

如果上面是正确的,那么像上面那样编码是对的。什么是正确的方式?

2 个答案:

答案 0 :(得分:1)

  

将下一个指针作为第一个成员是否有任何好处   结构的变量?

可以达到非常小的性能优势,以减少从零偏移成员的加载和写入的汇编指令大小,但仅限于没有虚拟表的类(vtbl是省略的第一个成员)。

如果您想要预构建范围/全局分配列表,则可以按照提及的方式初始化其元素。

你可以尝试一下:

struct node {
    struct node* next;
    int i;
};

node z = {0}, c={&z}, b={&c}, a={&b};
node * stack = &a;

你可以找到关于喜欢列表搜索' linux内核链表的非常有用的信息':

我现在正在自己设计的“侵入节点”中工作。使用c ++模板的通用容器perhaps this question might seem interesting

答案 1 :(得分:0)

node n, m;
*n = &m;

不是合法代码,也许你的意思是

node n, m;
n.next = &m;

但通常会通过动态分配来完成

node* n = new node;
n->next = new node;

因为通常你会使用node来创建一个可变长度列表。由于列表的长度不同,因此无法声明正确的变量数,而是必须动态分配节点。