使用链表堆叠。结构字段与结构类型相同
Stack using linked list. Struct field is of the same type as the struct
在使用链表练习堆栈时,我 运行 跨越了以下代码段:
class stack {
private:
struct node {
double value;
node* next;
};
size_t stack_size;
node* head;
...
}
如您所见,结构 node
有一个指针字段 *node
。字段如何与结构具有相同的类型?该字段是指向结构的指针,对吗?但它看起来是递归的(?)。没见过这种风格,什么意思?这样写的目的是什么?
A node*
不是 node
。如果你愿意,你可以称它为“递归”,因为每个 node
都可以有一个指向另一个 node
的成员。虽然它 不是 无限递归,因为 node*
可以 指向 node
但不一定如此.当我像这样创建 node
时:
node n;
那么 node
有一个未初始化的 next
成员。没有什么递归的。
What is the purpose of such writing?
在 linked 列表中,通常每个节点都有一个 link 到列表中的下一个节点。这可以通过 node
拥有 node* next
成员来实现。
How can a field be of the same type as the struct?
不能,编译不通过(注意本例中node
数据成员不是指针):
struct node {
double value;
node next;
};
但是当 node *next
是一个指针时它可以工作,因为编译器知道 node*
将是您机器上指针的大小。
That field is a pointer to the struct, right?
正确。
But it looks recursive(?)
正确。它反映了链表的工作方式。每个项目都指向下一个,直到下一个是哨兵 (nullptr
)。
I haven't seen such a style before, what does that mean?
不确定您所说的“例如风格”是什么意思。本质是你可以声明一个类型,比如 struct MyDataType;
然后有指向它的指针或引用,而不需要完整的类型定义可用。这是实现多个目标的常用技术。你在这里展示的那个,还有 PIMPL 习语等等。
What is the purpose of such writing?
希望以上问题的答案也能回答这个问题:)
在使用链表练习堆栈时,我 运行 跨越了以下代码段:
class stack {
private:
struct node {
double value;
node* next;
};
size_t stack_size;
node* head;
...
}
如您所见,结构 node
有一个指针字段 *node
。字段如何与结构具有相同的类型?该字段是指向结构的指针,对吗?但它看起来是递归的(?)。没见过这种风格,什么意思?这样写的目的是什么?
A node*
不是 node
。如果你愿意,你可以称它为“递归”,因为每个 node
都可以有一个指向另一个 node
的成员。虽然它 不是 无限递归,因为 node*
可以 指向 node
但不一定如此.当我像这样创建 node
时:
node n;
那么 node
有一个未初始化的 next
成员。没有什么递归的。
What is the purpose of such writing?
在 linked 列表中,通常每个节点都有一个 link 到列表中的下一个节点。这可以通过 node
拥有 node* next
成员来实现。
How can a field be of the same type as the struct?
不能,编译不通过(注意本例中node
数据成员不是指针):
struct node {
double value;
node next;
};
但是当 node *next
是一个指针时它可以工作,因为编译器知道 node*
将是您机器上指针的大小。
That field is a pointer to the struct, right?
正确。
But it looks recursive(?)
正确。它反映了链表的工作方式。每个项目都指向下一个,直到下一个是哨兵 (nullptr
)。
I haven't seen such a style before, what does that mean?
不确定您所说的“例如风格”是什么意思。本质是你可以声明一个类型,比如 struct MyDataType;
然后有指向它的指针或引用,而不需要完整的类型定义可用。这是实现多个目标的常用技术。你在这里展示的那个,还有 PIMPL 习语等等。
What is the purpose of such writing?
希望以上问题的答案也能回答这个问题:)