std::stack
std::stack
<stack>
class T,
class Container = std::deque <T>
The std::stack
class is a container adaptor that gives the programmer the functionality of a stack - specifically, a LIFO (last-in, first-out) data structure.
The class template acts as a wrapper to the underlying container - only a specific set of functions is provided. The stack pushes and pops the element from the back of the underlying container, known as the top of the stack.
std::stack
are constexpr: it is possible to create and use std::stack
objects in the evaluation of a constant expression.However, std::stack
objects generally cannot be constexpr, because any dynamically allocated storage must be released in the same evaluation of constant expression.
Contents
[edit] Template parameters
T
is not the same type as Container::value_type
.
-
back()
, e.g., std::vector::back() , -
push_back()
, e.g., std::deque::push_back() , -
pop_back()
, e.g., std::list::pop_back() .
The standard containers std::vector (including std::vector<bool>), std::deque and std::list satisfy these requirements. By default, if no container class is specified for a particular stack class instantiation, the standard container std::deque is used.
[edit] Member types
[edit] Member objects
[edit] Member functions
Element access
Capacity
Modifiers
[edit] Non-member functions
[edit] Helper classes
Deduction guides
(since C++17)[edit] Notes
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Ranges construction and insertion for containers |
__cpp_lib_constexpr_stack |
202502L |
(C++26) | constexpr std::stack
|
[edit] Example
Reason: no example
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 307 | C++98 | Container could not be std::vector<bool>
|
allowed |
LWG 2566 | C++98 | Missing the requirement for Container::value_type
|
ill-formed if T is not the same type as Container::value_type
|