Introduction to Stacks using std::stack

When to use std::stack vs std::vector?

In what situations would I choose to use a std::stack instead of a std::vector in C++? They seem to have similar functionality.

Illustration representing computer hardware

While std::stack and std::vector can both be used to store a collection of elements, they are designed for different use cases.

You would choose std::stack when:

  • You need to enforce LIFO (last-in, first-out) access. A stack ensures elements can only be added and removed from one end.
  • You only need access to the top element. If you don't need random access to elements, a stack provides a simpler interface.
  • You want to prevent unintended access. The restricted interface of stack helps prevent bugs from accessing elements incorrectly.

You would choose std::vector when:

  • You need random access to elements using an index. A vector allows accessing any element by its position.
  • You need to iterate over elements. Vectors can be easily iterated using a range-for loop or iterators.
  • You need the last element. While a stack can only access the top element, with a vector you can use back() to get the last element.

Here's an example showing cases where stack and vector are appropriate:

#include <iostream>
#include <stack>
#include <vector>

int main() {
  // Use a stack when LIFO access is needed
  std::stack<int> s;
  while (!s.empty()) {
    std::cout << << ' ';  // prints 3 2 1

  // Use a vector when random access is needed
  std::vector<int> v{1, 2, 3};
  std::cout << '\n' << v[1] << '\n';  // prints 2
  for (int i : v) {
    std::cout << i << ' ';  // prints 1 2 3
3 2 1
1 2 3

So in summary - use std::stack for LIFO access to the top element only, and std::vector for random access, iteration, or access to the last element. The best choice depends on your specific access and usage requirements.

Answers to questions are automatically generated and may not have been reviewed.

Free, Unlimited Access

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Screenshot from Warhammer: Total War
Screenshot from Tomb Raider
Screenshot from Jedi: Fallen Order
Contact|Privacy Policy|Terms of Use
Copyright © 2024 - All Rights Reserved