std::stack
Defined in header <stack>
|
||
|
template
<
class T, |
||
The std::stack class is a container adaptor that gives the programmer the functionality of a stack
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.
Template parameters
| T | - | The type of the stored elements. The program is ill-formed if T is not the same type as Container::value_type.
|
| Container | - | The type of the underlying container to use to store the elements. The container must satisfy the requirements of
SequenceContainer
. Additionally, it must provide the following functions with the usual semantics:
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 |
Member types
| Type | Definition |
container_type
|
Container |
value_type
|
Container::value_type |
size_type
|
Container::size_type |
reference
|
Container::reference |
const_reference
|
Container::const_reference |
Member objects
| Member | Description |
Container c |
the underlying container (protected member object) |
Member functions
constructs the stack (public member function) |
|
destructs the stack (public member function) |
|
| assigns values to the container adaptor (public member function) |
|
Element access | |
| accesses the top element (public member function) |
|
Capacity | |
| checks whether the container adaptor is empty (public member function) |
|
| returns the number of elements (public member function) |
|
Modifiers | |
| inserts element at the top (public member function) |
|
|
(C++23)
|
inserts a range of elements at the top (public member function) |
|
(C++11)
|
constructs element in-place at the top (public member function) |
| removes the top element (public member function) |
|
|
(C++11)
|
swaps the contents (public member function) |
Non-member functions
lexicographically compares the values of two stacks (function template) |
|
|
(C++11)
|
specializes the std::swap algorithm (function template) |
Helper classes
|
(C++11)
|
specializes the std::uses_allocator type trait (class template specialization) |
|
(C++23)
|
formatting support for std::stack (class template specialization) |
Deduction guides |
(since C++17) |
Notes
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Ranges construction and insertion for containers |
Example
| This section is incomplete Reason: no example |
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
|
See also
| dynamic contiguous array (class template) |
|
| space-efficient dynamic bitset (class template specialization) |
|
| double-ended queue (class template) |
|
| doubly-linked list (class template) |