1

スタックの最小要素を追跡するために、クラス minStack を実装しようとしています。以下は私のコードです。元のスタックを更新する必要があるため、基本クラスの Stack のポインターを使用しようとしましたが、基本クラスのメンバーではなく基本クラスのポインターであるため、呼び出し方がわかりません。

class minStack: public Stack{
private:
    Stack* minS;
public:
    int min()const{
        if(minS->top)
            return minS->top->data;
        return -1;
    }
    minStack(){
        minS = new Stack();
    }
    int pop(){
        if (Stack::this->pop == min()) {   //question here!
            minS->pop();
        }
    }
    void push(int item){
        if(item <= min()){
            minS->push(item);
        }
        Stack::this->push();  //question here!
    }
};
4

1 に答える 1

6

基本クラスの関数を呼び出して呼び出すStack::pop()ことができます。Stack::push()

int pop()
{
    if (Stack::pop() == min()) { minS->pop(); }
}

void push(int item)
{
    if (item <= min())
    {
        minS->push(item);
    }
    Stack::push(item);
}

無関係なアドバイス: 通常、自分のようなコンテナー アダプターを作成するためにコンテナーから派生することはありません。通常、メンバーを使用してクラスを構成します。

class min_stack
{
    std::stack<int> stack_;
    std::stack<int> min_;
public:
    int pop() { /* ... */ }
    void push(int n) { /* ... */ }
};
于 2013-10-26T15:35:00.540 に答える