2

ここに私の機能があります、

    template <class KeyType >
    KeyType * Stack<KeyType>::Pop(KeyType& x) {
        if (IsEmpty()) {  //isempty is just a bool function
            StackEmpty(); //just prints out that stack is empty
            return 0;     //bad coding breaking out of the function
        }
        x = stack[top--]; //stack is a pointer to an array, top is the top of the stack
        return &x;
    }

私の質問は次のとおりです。これがメインでどのように呼び出されるかわかりません。私の理解では、ポップ関数には、スタックから何をポップするかのオプションが実際にあるべきではありません。LIFOでしょ?主な質問は、Keytype& x パラメーターが正確に何を取り、メインでどのように呼び出すかということです。(この場合、KeyType は KeyType *stack an int としてこの特定のプログラムで初期化されます)。

4

5 に答える 5

0

私の理解では、この関数は keytype の任意の要素を取り、参照を取得します。

そう呼ぶ

int value = 0; 
Pop(value);

&value を使用して Pop を呼び出しています。つまり、実際には int 値のアドレスを使用して、したがって参照によって呼び出します。

return 0数値以外のデータ型を使用して Pop を呼び出した場合、コンパイラが return ステートメントが無効であると通知する可能性があるのではないかと思います。NULL を返す方が良いかもしれません。(少なくとも読んだほうがいい)

于 2013-10-14T07:20:43.787 に答える
0

ポップされたアイテムの値を埋めます

int main(..)
{

   ...
   int poppedItem;

  stack.pop(poppedItem);
}
于 2013-10-14T07:14:15.510 に答える
0

KeyTypeパラメータがintあなたが言ったようにある場合、Stackおそらく次のようになります。

Stack<int> stack;

メソッドのアンパサンドは、の参照Pop渡すことを意味します(これはあなたの場合です)。つまり、このメソッドは、ポップされた項目の値を返すだけでなく、渡された引数にも値を入れます。KeyTypeintPop

int a, b;
a = *(stack.pop(b));
cout << a << " = " << b << endl;
于 2013-10-14T07:15:41.280 に答える