Как сделать, чтобы стек хранил ссылки на очередь?

Имеется n последовательностей натуральных чисел. Очередь должна хранить элементы этих последовательностей, а стек - ссылки на очередь. Не могу разобраться как сделать, чтобы стек хранил ссылки на очередь


Ответы (1 шт):

Автор решения: Vladimir Nikitin

Например, можно сделать так:

#include <queue>
#include <stack>
#include <memory>

int main()
{
    std::queue<std::shared_ptr<std::stack<int>>> stack_queue;
    const int num_stacks = 5;
    for(int i = 0; i < num_stacks; ++i) {
        auto stack = std::make_shared<std::stack<int>>();
        // fill stack
        stack_queue.push(stack);
    }
    return 0;
}

Edit:

Исправленный код, который проходится по всем очередям в стеке и печатает все элементы очередей:

#include <queue>
#include <stack>
#include <memory>

int main()
{
    std::stack<std::shared_ptr<std::queue<int>>> queue_stack;
    const int num_queues = 5;
    const int num_ints = 7;
    for(int i = 0; i < num_queues; ++i) {
        auto queue = std::make_shared<std::queue<int>>();
        for(int j = 0; j < num_ints; ++j) {
            queue->push(i * j);
        }
        queue_stack.push(queue);
    }
    while(!queue_stack.empty()) {
        auto queue = queue_stack.top();
        queue_stack.pop();
        while(!queue->empty()) {
            int elem = queue->front();
            queue->pop();
            std::cout << elem << std::endl;
        }
    }
    return 0;
}
→ Ссылка