1

我想将堆栈收件箱中的内容移动到发件箱,然后返回发件箱顶部。但是 pop 的返回类型是 void,所以代码会抛出一个错误:void value not ignored as it hould be.

如何移动这些值?

这是代码:

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

您可以使用 访问最后一个元素,top()然后使用 将其从堆栈中删除pop()。请参阅此处以获得很好的参考。

于 2013-06-12T10:48:16.160 回答
0

inbox.pop只是从堆栈中删除顶部元素。 inbox.top返回顶部元素,之后您可以使用inbox.pop它来删除它。

于 2013-06-12T10:48:53.797 回答