我正在尝试用C ++实现一个简单的堆栈。我的代码工作正常,除了这个函数minm()。我的结果非常出乎意料。如果我以粗体注释掉该行,那么我的程序甚至都没有运行。另外,你可以看到我的函数minm()和amp;之间的唯一区别。 minmm()是粗线。请帮帮我。
解释如下:
函数minm()&正在考虑的minmm()是 italic &这一行 cout<<“被称为”<< endl; 是粗体
#include<iostream>
using namespace std;
const int MAX_ALLOWED_SIZE = 100000000;
class MyStack{
int *a;
int *min, *max;
int top;
int size;
public:
MyStack(int s=MAX_ALLOWED_SIZE);
void push(int i);
int pop();
int maxm();
int minm() // This function is failing
{
//cout<<"called\t";
if(!stackEmpty())
{
cout<<min[top]<<" = " <<a[min[top]]<<endl;
return a[min[top]];
}
return NULL;
}
int minmm() // This function is working
{
cout<<"called\t";
if(!stackEmpty())
{
cout<<min[top]<<" = " <<a[min[top]]<<endl;
return a[min[top]];
}
return NULL;
}
bool stackEmpty();
void printStack();
};
int main()
{
MyStack s;
int t;
while(true)
{
scanf("%d",&t);
s.push(t);
cout<<"min = "<<s.minm()<<endl;
cout<<"min = "<<s.minmm()<<endl;
if(t==-1) break;
}
}
输入:
234
23
-1
输出:
min = 0
called a[0] = 234
min = 234
min = 0
called a[1] = 23
min = 23
min = 0
called a[2] = -1
min = -1
现在,我在ideone上的两个函数得到相同(错误)的结果,而函数minmm()在我的系统上返回(我在Code :: Blocks 12.11中使用GNU GCC编译器)。
答案 0 :(得分:1)
在你的堆栈中,你没有返回false:
bool stackEmpty(){
if(top == -1) return true;
return false;
}
或
bool stackEmpty(){
return (top == -1);
}