C++ 如何构建C++;堆栈结构
下面是我如何编写代码的,但是,当我完成C++ 如何构建C++;堆栈结构,c++,stack,C++,Stack,下面是我如何编写代码的,但是,当我完成push()时,first的指针没有指向正确的对象。我想知道如何解决这个问题。表达式&Node(I)创建一个临时对象并给您一个指向它的指针。然后临时对象立即被销毁,留下一个指向不存在对象的指针 您需要使用new来分配新对象 &oldFirst也有类似的问题,它给您一个指向局部变量的指针,该变量将在函数返回后被销毁。您需要使用指针变量。解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,您应该[编辑]您的问题,以包
push()
时,first
的指针没有指向正确的对象。我想知道如何解决这个问题。表达式&Node(I)
创建一个临时对象并给您一个指向它的指针。然后临时对象立即被销毁,留下一个指向不存在对象的指针
您需要使用new
来分配新对象
&oldFirst
也有类似的问题,它给您一个指向局部变量的指针,该变量将在函数返回后被销毁。您需要使用指针变量。解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,您应该[编辑]您的问题,以包括一个重现您的问题的示例,以及您在调试器中所做的观察。std::stack
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;
}