-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