'How do I print a queue?
I am trying to print a queue
below. I have tried the idea of creating a temp queue
and writing into it then writing it back.
But it's not working.
Or what am I missing here?
for(int i = 1; i<myQueue.size(); i++)
{
queue<int> tempQueue;
cout << myQueue.front() << endl;
MytempQueue.push(myQueue.front());
myQueue.pop();
myQueue.push(myTempQueue.back());
}
My queue is queue<int> myQueue;
Essentially, I want to print this queue
without emptying it. But I am stuck here.
Solution 1:[1]
There is no efficient way to do this*. But you can do the following:
- Make a copy of the queue.
- Iterate over the copy, printing the front, then popping it.
For example:
#include <queue>
#include <iostream>
void print_queue(std::queue<int> q)
{
while (!q.empty())
{
std::cout << q.front() << " ";
q.pop();
}
std::cout << std::endl;
}
int main()
{
std::queue<int> q;
for (auto i : {1,2,3,7,4,9,7,2,4}) q.push(i);
print_queue(q);
}
* There's a hack using inheritance. std::queue
has a protected member C
which is the underlying container holding the data. You could inherit from std::queue
and add methods to do the printing using C
. But you have to be fully aware of the implications of inheriting from a type that is not necessarily designed for that.
Solution 2:[2]
for(int i = 1; i<myQueue.size(); i++)
Loop should start with 0, or check condition should be <=
queue<int> myQueue;
myQueue.push(1);
myQueue.push(2);
myQueue.push(3);
myQueue.push(4);
myQueue.push(5);
for (size_t i = 0; i < myQueue.size(); i++)
{
cout << myQueue.front() << endl;
myQueue.push(myQueue.front());
myQueue.pop();
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Konrad |
Solution 2 | user1647879 |