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コンパイラを使用しています)。