14

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.

2
  • 5
    Just a hint: if printing is a frequent, important operation in your code, then perhaps a queue is just the wrong choice for the data type, and you may be better of with a different kind of container altogether. Commented Mar 9, 2014 at 9:11
  • @ChristianHackl What would be that container? Commented Oct 26, 2021 at 0:59

2 Answers 2

18

There is no efficient way to do this*. But you can do the following:

  1. Make a copy of the queue.
  2. 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.

Sign up to request clarification or add additional context in comments.

6 Comments

How do i make a copy of the queue? Thats what im trying to do. Pseudo code help would be awesome!
queue<int> copy = myQueue;
@user3398034 std::queue have both a copy constructor and an copy assignment operator.
@user3398034 I added an example
If you have custom class type like queue<classType> then we can use q.front().yourMethod() to get or set values
|
0

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(); } 

1 Comment

This empties the queue. The question requested a solution that doesn't empty the queue.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.