如何构建c++栈结构

How to build a C++ Stack structure

本文关键字:c++ 结构 构建 何构建      更新时间:2023-10-16
struct Node{
    int value;
    Node *next;
    Node(int val) :value(val), next(nullptr){}
};
class Stack
{
public:
    void push(int val);
    int pop();
    bool is_empty(){ return first == nullptr; }
private:
    Node *first = nullptr;
};
int Stack::pop(){
    int ret = first->value;
    first = first->next;
    return ret;
}
void Stack::push(int i){
    if (is_empty()){
        first = &Node(i);
        return;
    }
    Node oldFirst = *first;
    first = &Node(i);
    first->next = &oldFirst;
}

这是我写的代码,然而,有一个问题,当我完成push()时,first的指针不是指向正确的对象。我想知道怎样才能解决这个问题。

表达式&Node(i)创建了一个临时对象,并给你一个指向它的指针。然后,临时对象立即被析构,留下一个指向不存在的对象的指针。

您需要使用new来分配一个新对象。

&oldFirst中也有类似的问题,它给了你一个指向本地变量的指针,一旦函数返回,该指针将被销毁。你需要使用指针变量