结构不是为节点创建的,但是在初始化节点时,如果我们在它之前编写结构,代码工作正常,没有错误。为啥?

Posted

技术标签:

【中文标题】结构不是为节点创建的,但是在初始化节点时,如果我们在它之前编写结构,代码工作正常,没有错误。为啥?【英文标题】:structure not created for Node but at time of initializing a node if we write struct before it ,the code is working fine, No Errors.Why?结构不是为节点创建的,但是在初始化节点时,如果我们在它之前编写结构,代码工作正常,没有错误。为什么? 【发布时间】:2021-11-27 20:33:46 【问题描述】:
class Node

public:
    int value;
    Node *next;
;
class LinkedList

private:
    Node *head;

public:
    LinkedList(void)  head = NULL; 
    ~LinkedList(void);
    void insertAtHead(int);
    void insertAtLocation(int, int);
    void Delete(int);
    void displayList();
    int countList();
;
void LinkedList::insertAtHead(int new_value)

    struct Node *newNode, *NodePtr = head;
    newNode = new Node;
    newNode->value = new_value;
    newNode->next = NULL;
    if (!head)
        head = newNode;
    else
    
        newNode->next = NodePtr;
        head = newNode;
    
    cout << "Node successfully inserted at the head\n\n";

我没有为节点创建任何结构,而是为它创建了一个类。但是我不知道为什么当我通过在初始化开始时编写 struct 在 insertAtHead 函数中创建一个 newNode 时我的代码正常工作,那里发生了什么?不,在 Node.js 之前编写结构时编译和运行时错误。这项工作背后的理念是什么?

【问题讨论】:

我把它写成有趣。看起来 C++ 编译器完全忽略了struct Node *newNode, *NodePtr = head; 中的struct。它不是必需的,因此编译器似乎只是读取它并将其放入“无关紧要”中。堆。 【参考方案1】:

structclass 之间没有与此代码相关的区别。因此,您可以随意切换它们而不会产生任何后果。

【讨论】:

【参考方案2】:

这个

struct Node *newNode, *NodePtr = head;

是 C 主义。在 C++ 中,你会写:

Node *newNode, *NodePtr = head;

此外,结构是 C++ 中的一个类。 structclass 只是两个不同的关键字。仅对于默认访问,它们在用于定义类时会有所不同。有关详细信息,请参见此处:When should you use a class vs a struct in C++?。

【讨论】:

以上是关于结构不是为节点创建的,但是在初始化节点时,如果我们在它之前编写结构,代码工作正常,没有错误。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

数据结构线性表之双向带头循环链表

DOM节点创建(jQuery)

class_create(),device_create自动创建设备文件结点

设计模式是在运用构造定律

jQuery--DOM

迭代器在添加到添加到列表向量的结构中时会停止指向某个值吗?