C++ Stack
A stack stores multiple elements in a specific order, called LIFO.
LIFO stands for Last in, First Out. To vizualise LIFO, think of a pile of pancakes, where pancakes are both added and removed from the top. So when removing a pancake, it will always be the last one you added. This way of organizing elements is called LIFO in computer science and programming.
Unlike vectors, elements in the stack are not accessed by index numbers. Since elements are added and removed from the top, you can only access the element at the top of the stack.
To use a stack, you have to include the <stack>
header file:
// Include the stack library #include <stack>
Create a Stack
To create a stack, use the stack
keyword, and specify the type of values it should store within angle brackets <>
and then the name of the stack, like: stack<
type>
stackName.
// Create a stack of strings called cars stack<string> cars;
Note: The type of the stack (string in our example) cannot be changed after its been declared.
Note: You cannot add elements to the stack at the time of declaration, like you can with vectors :
stack<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
Add Elements
To add elements to the stack, use the .push()
function, after declaring the stack:
Example
// Create a stack of strings called cars stack<string> cars; // Add elements to the stack cars.push("Volvo"); cars.push("BMW"); cars.push("Ford"); cars.push("Mazda");
The stack will look like this (remember that the last element added is the top element):
Mazda (top element) Ford BMW Volvo
Access Stack Elements
You cannot access stack elements by referring to index numbers, like you would with arrays and vectors.
In a stack, you can only access the top element, which is done using the .top()
function:
Example
// Access the top element
cout << cars.top(); // Outputs "Mazda"
Change the Top Element
You can also use the .top
function to change the value of the top element:
Example
// Change the value of the top element cars.top() = "Tesla"; // Access the top element cout << cars.top(); // Now outputs "Tesla" instead of "Mazda"
Remove Elements
You can use the .pop()
function to remove an element from the stack.
This will remove the last element that was added to the stack:
Example
// Create a stack of strings called cars stack<string> cars; // Add elements to the stack cars.push("Volvo"); cars.push("BMW"); cars.push("Ford"); cars.push("Mazda"); // Remove the last added element (Mazda) cars.pop(); // Access the top element (Now Ford) cout << cars.top();
Get the Size of the Stack
To find out how many elements a stack has, use the .size()
function:
Example
cout << cars.size();
Check if the Stack is Empty
Use the .empty()
function to find out if the stack is empty or not.
The .empty()
function returns
(true) if the stack is empty and
10
(false) otherwise:
Example
stack<string> cars; cout << cars.empty(); // Outputs 1 (The stack is empty)
Example
stack<string> cars; cars.push("Volvo"); cars.push("BMW"); cars.push("Ford"); cars.push("Mazda"); cout << cars.empty(); // Outputs 0 (not empty)