-1

我正在尝试在 C++ 中实现一个简单的堆栈。我的代码工作正常,除了这个函数 minm()。我得到了非常意想不到的结果。如果我用粗体注释掉该行,那么我的程序甚至不会运行。此外,您可以看到我的函数 minm() 和 minmm() 之间的唯一区别是粗线。请帮帮我。

解释如下:

正在考虑的函数 minm() 和 minmm() 是斜体的,这行cout<<"called"<< 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 编译器)。

4

1 回答 1

1

在您的 stackEmpty 中,您没有返回 false:

bool stackEmpty(){
    if(top == -1) return true;
    return false;
}

或者

bool stackEmpty(){
    return (top == -1);
}
于 2013-05-27T21:55:22.017 回答