2018-10-12 15:37:13 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								title: queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Queues
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								`queue`  is one of the most used containers in C++. A container is a data structure that stores a collection of objects, some in order, some not. All containers have a different set of functions that allow you to access an object(s) in that collection. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								`std::queue`  is part of the C++ standard library (hence the prefix `std::` ) and allows you to store data in First In First Out (FIFO) order. NOTE: **All objects within a queue must be of the same data type**  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The data type you store within a queue goes within angle brackets next to the queue keyword. For example, if you would like to store a collection of integers the queue would be `std::queue<int> queue_name` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-17 10:10:18 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### Queue FIFO Explanation
  
						 
					
						
							
								
									
										
										
										
											2018-10-12 15:37:13 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								`queue`  allows us to push/enqueue and pop/dequeue in specific order. **Push**  means inserting an object at the front of the queue. **Pop**  means pulling out the "oldest" object from end of the queue. So when you push it is at the front and when you pop you extract the oldest element. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-11-03 23:11:16 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### Uses of Queue
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  When data is transferred asynchronously between two processes. eg. IO Buffers, pipes,file IO etc. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  When a resource is shared among multiple consumers. Examples include CPU scheduling, Disk scheduling. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  In print spooling, documents are loaded into a buffer and afterward the printer puls them off the buffer at its own rate. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-12 15:37:13 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								### Queue Operations
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The queue container supports the following operations:   
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  push (enqueue)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  pop (dequeue)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  empty
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  size
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  front
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  back
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#### Push
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Allows you to inserts a new element at the end of the queue, after its current last element.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//Push operation in Queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#include <iostream>       // std::cout
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#include <queue>          // std::queue
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int main ()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::queue< int >  q;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(1);    //Pushing 1 at front of the queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(2);    //Pushing 2 at front of the queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return 0;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#### Front
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Allows you to access the next element in the queue without removing it.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The next element is the "oldest" element in the queue.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//Front operation in Queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#include <iostream>       // std::cout
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#include <queue>          // std::queue
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int main ()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::queue< int >  q;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(1);    //Pushing 1 at front of the queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(2);    //Pushing 2 at front of the queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::cout< < q.front ()<<' \n';      // Accessing  the  front  of  the  queue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::cout< < q.front ()<<' \n';      // Accessing  the  front  of  the  queue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return 0;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Output:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#### Pop
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Allows you to remove the next element in the queue, effectively reducing its size by one.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The element removed is the "oldest" element.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//Pop operation in Queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#include <iostream>       // std::cout
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#include <queue>          // std::queue
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int main ()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::queue< int >  q;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(1);    //Pushing 1 at front of the queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(2);    //Pushing 2 at front of the queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::cout< < q.front ()<<' \n';      // Accessing  the  front  of  the  queue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.pop();                        //Removing the oldest element 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::cout< < q.front ()<<' \n';      // Accessing  the  front  of  the  queue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.pop();                        //Removing the oldest element
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return 0;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Output:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    2
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#### Size
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Returns the number of elements in the `queue` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//Size operation in Queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#include <iostream>       // std::cout
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#include <queue>          // std::queue
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int main ()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::queue< int >  q;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(1);    //Pushing 1 at front of the queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(2);    //Pushing 2 at front of the queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::cout< < q.size ()<<' \n';      // Accessing  the  front  of  the  queue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.pop();                        //Removing the oldest element 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::cout< < q.size ()<<' \n';      // Accessing  the  front  of  the  queue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.pop();                        //Removing the oldest element 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::cout< < q.size ()<<' \n';      // Accessing  the  front  of  the  queue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return 0;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Output:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    2
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    0
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#### Empty
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Returns whether the `queue`  is empty ,i.e. whether your queue size is zero.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								It returns `true`  if queue's size 0 else returns `false`  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-15 10:08:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//Empty operation in Queue
							 
						 
					
						
							
								
									
										
										
										
											2018-10-12 15:37:13 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								#include <iostream>       // std::cout
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#include <queue>          // std::stack
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int main ()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::queue< int >  q;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(1);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(2);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  while(q.empty() != true){
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      std::cout< < q.front ()<<' \n'; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      q.pop();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::cout<< "Out of loop"<< '\n';
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return 0;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Output:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    2
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Out of loop
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#### Back
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Allows you to access the last element in the queue without removing it.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The next element is the "newest" element in the queue.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//Back operation in Queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#include <iostream>       // std::cout
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#include <queue>          // std::queue
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int main ()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::queue< int >  q;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(1);    //Pushing 1 at front of the queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  q.push(2);    //Pushing 2 at front of the queue
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::cout< < q.back ()<<' \n';      // Accessing  the  back  of  the  queue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std::cout< < q.back ()<<' \n';      // Accessing  the  back  of  the  queue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return 0;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Output:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    2
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    2
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### For More Resources:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								http://www.cplusplus.com/reference/queue/queue/
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### Citations:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Image Courtesy: https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics)