Как сделать, чтобы стек хранил ссылки на очередь?
Имеется 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;
}