1

スタック受信箱から送信箱に内容を移動して、送信箱の先頭に戻したい。しかし、pop の戻り値の型は void であるため、コードは次のようなエラーをスローします。

値はどのように移動できますか?

コードは次のとおりです。

template <class E>
class Queue
{

    private:
        stack<E> inbox;
        stack<E> outbox;

    public:
     void enqueue(E item) {
        inbox.push(item);
    }

    E dequeue() {
        if (outbox.empty()) {
            while (!inbox.empty()) {
                outbox.push(inbox.pop());
            }
        }

        return outbox.pop();
    }

};
4

3 に答える 3

6

スタックのstack::top一番上を返すのです。最上位の要素を返さずstack::popに削除するだけです。

E dequeue() {
    if (outbox.empty()) {
        while (!inbox.empty()) {
            outbox.push(inbox.top());
            inbox.pop();
        }
    }
    E ret = outbox.top();
    outbox.pop();
    return ret;
}
于 2013-06-12T10:48:51.663 に答える
0

inbox.popスタックから一番上の要素を削除するだけです。 inbox.top一番上の要素を返します。その後、それinbox.popを削除するために使用できます。

于 2013-06-12T10:48:53.797 に答える
0

で最後の要素にアクセスし、top()でスタックから削除できますpop()ここをよく参考にしてください。

于 2013-06-12T10:48:16.160 に答える