* fix: replace sh with shell fix replace terminal with shell fix replace node with js fix replace output with shell fix replace cs with csharp fix replace c++ with cpp fix replace c# with csharp fix replace javasctipt with js fix replace syntax with js fix replace unix with shell fix replace linux with shell fix replace java 8 with java fix replace swift4 with swift fix replace react.js with jsx fix replace javascriot with js fix replace javacsript with js fix replace c++ - with cpp fix: corrected various typos fix: replace Algorithm with nothing fix: replace xaml with xml fix: replace solidity with nothing fix: replace c++ with cpp fix: replace txt with shell fix: replace code with json and css fix: replace console with shell
5.2 KiB
title
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
Queue FIFO Explanation
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.
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.
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.
//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.
//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.
//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
.
//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
//Empty operation in Queue
#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.
//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)