我希望一个类的所有成员函数都可以访问同一个堆栈。每个成员函数都会将数据推送到堆栈并从堆栈中弹出数据。
我很难声明堆栈。我有一个 cpp 文件和一个头文件,它不允许我在头文件中声明一个堆栈。有没有人有一个如何做到这一点的例子?
我需要使用堆栈作为 LIFO 数据结构更有意义,因为我只需要访问放置在堆栈上的最后一项。
我尝试在头文件中将其声明为受保护的成员,stack<int> items;
但出现编译错误“堆栈未命名类型”。
亚当
我希望一个类的所有成员函数都可以访问同一个堆栈。每个成员函数都会将数据推送到堆栈并从堆栈中弹出数据。
我很难声明堆栈。我有一个 cpp 文件和一个头文件,它不允许我在头文件中声明一个堆栈。有没有人有一个如何做到这一点的例子?
我需要使用堆栈作为 LIFO 数据结构更有意义,因为我只需要访问放置在堆栈上的最后一项。
我尝试在头文件中将其声明为受保护的成员,stack<int> items;
但出现编译错误“堆栈未命名类型”。
亚当
不要绕过基本的数据结构。
你的堆栈代表了一些东西,可能是Orders
三明治店里的堆栈,或者是Pancakes
在光荣的 5D 中渲染的堆栈。创建一个类型为 的对象Pancakes
,或者Orders
根据需要创建一个对象,并将引用传递给需要了解它的对象。
// pancakes.h
#include <stack>
class Pancake;
class Pancakes
{
public:
void addPancake(const Pancake& pancake);
Pancake& top() const;
void pop();
private:
std::stack<Pancake> m_pancakes;
};
// pancakes.cpp
#include "pancakes.h"
#include "pancake.h"
void Pancakes::addPancake(const Pancake& pancake)
{
m_pancakes.push(pancake);
}
Pancake& Pancakes::top() const
{
return m_pancakes.top();
}
void Pancakes::pop()
{
m_pancakes.pop();
}
好的,假设您使用的是 std::stack。
class MyClass
{
private:
std::stack<int>& myStack_;
public:
MyClass(std::stack<int>& stack) : myStack_(stack) { };
}; // eo MyClass
每次创建MyClass
. 这也避免了单例:
std::stack<int> globalStack;
MyClass class1(globalStack);
MyClass class2(globalStack);
确保你做一个
#include <stack>
另外要么做一个
using namespace std;
或一个
std::stack<int> items;
在头文件中。