FreeBSD Manual Pages
std::stack::stack(3) C++ Standard Libary std::stack::stack(3) NAME std::stack::stack - std::stack::stack Synopsis stack() : stack(Container()) {} (1) (since C++11) explicit stack( const Container& cont = Container() (until C++11) ); explicit stack( const Container& cont ); (since C++11) explicit stack( Container&& cont ); (3) (since C++11) stack( const stack& other ); (4) (implicitly de- clared) (since C++11) stack( stack&& other ); (5) (implicitly de- clared) template< class InputIt > (6) (since C++23) stack( InputIt first, InputIt last ); template< class Alloc > (7) (since C++11) explicit stack( const Alloc& alloc ); template< class Alloc > (8) (since C++11) stack( const Container& cont, const Alloc& alloc ); (2) template< class Alloc > (9) (since C++11) stack( Container&& cont, const Alloc& alloc ); template< class Alloc > (10) (since C++11) stack( const stack& other, const Alloc& alloc ); template< class Alloc > (11) (since C++11) stack( stack&& other, const Alloc& alloc ); template< class InputIt, class Alloc > stack( InputIt first, InputIt last, const Alloc& (12) (since C++23) alloc ); template< container-compatible-range<T> R> (13) (since C++23) stack( std::from_range_t, R&& rg ); template< container-compatible-range<T> R, class Alloc > (14) (since C++23) stack( std::from_range_t, R&& rg, const Alloc& alloc ); Constructs new underlying container of the container adaptor from a variety of data sources. 1) Default constructor. Value-initializes the container. 2) Copy-constructs the underlying container c with the contents of cont. This is also the default constructor. (until C++11) 3) Move-constructs the underlying container c with std::move(cont). 4) Copy constructor. The adaptor is copy-constructed with the con- tents of other.c. 5) Move constructor. The adaptor is constructed with std::move(other.c). 6) Constructs the underlying container c with the contents of the range [first, last). This overload participates in overload resolution only if InputIt satisfies LegacyInputIterator. 7-12) These constructors participate in overload resolution only if std::uses_allocator<Container, Alloc>::value is true, that is, if the underlying container is an allocator-aware container (true for all standard li- brary containers that can be used with stack). 7) Constructs the underlying container using alloc as allocator, as if by c(alloc). 8) Constructs the underlying container with the contents of cont and using alloc as allocator, as if by c(cont, alloc). 9) Constructs the underlying container with the contents of cont us- ing move semantics while utilizing alloc as allocator, as if by c(std::move(cont), alloc). 10) Constructs the adaptor with the contents of other.c and using alloc as allocator, as if by c(other.c, alloc). 11) Constructs the adaptor with the contents of other using move se- mantics while utilizing alloc as allocator, as if by c(std::move(other.c), alloc). 12) Constructs the underlying container with the contents of the range [first, last) using alloc as allocator, as if by c(first, last, alloc). This over- load participates in overload resolution only if InputIt satisfies LegacyInputItera- tor. 13) Constructs the underlying container with ranges::to<Container>(std::forward<R>(rg)). 14) Constructs the underlying container with ranges::to<Container>(std::forward<R>(rg), alloc). Parameters alloc - allocator to use for all memory al- locations of the underlying container other - another container adaptor to be used as source to initialize the underlying container cont - container to be used as source to initialize the underlying container first, last - range of elements [first, last) to initialize with rg - a container compatible range, that is, an input_range whose elements are con- vertible to T Type requirements - Alloc must meet the requirements of Allocator. - Container must meet the requirements of Container. The constructors taking an allocator parameter participate in overload resolution only if Con- tainer meets the requirements of AllocatorAwareContainer. - InputIt must meet the requirements of LegacyInputIterator. Complexity Same as the corresponding operation on the wrapped container. Notes Feature-test macro Value Std Feature Iterator pair con- structors for __cpp_lib_adaptor_iterator_pair_constructor 202106L (C++23) std::queue and std::stack; overloads (6) and (12) Ranges- aware __cpp_lib_containers_ranges 202202L (C++23) con- struction and inser- tion; overloads (13) and (14) Example // Run this code #include <cassert> #include <deque> #include <iostream> #include <memory> #include <ranges> #include <stack> int main() { std::stack<int> c1; c1.push(5); assert(c1.size() == 1); std::stack<int> c2(c1); assert(c2.size() == 1); std::deque<int> deq{3, 1, 4, 1, 5}; std::stack<int> c3(deq); // overload (2) assert(c3.size() == 5); # ifdef __cpp_lib_adaptor_iterator_pair_constructor const auto il = {2, 7, 1, 8, 2}; std::stack<int> c4{il.begin(), il.end()}; // C++23, (6) assert(c4.size() == 5); # endif # if __cpp_lib_containers_ranges >= 202202L // C++23, overload (13) auto c5 = std::stack(std::from_range_t, std::ranges::iota(0, 42)); assert(c5.size() == 42); // the same effect with pipe syntax, internally uses overload (13) auto c6 = std::ranges::iota(0, 42) | std::ranges::to<std::stack>(); assert(c6.size() == 42); std::allocator<int> alloc; // C++23, overload (14) auto c7 = std::stack(std::from_range_t, std::ranges::iota(0, 42), alloc); assert(c7.size() == 42); // the same effect with pipe syntax, internally uses overload (14) auto c8 = std::ranges::iota(0, 42) | std::ranges::to<std::stack>(alloc); assert(c8.size() == 42); # endif } Defect reports The following behavior-changing defect reports were applied retroac- tively to previously published C++ standards. DR Applied to Behavior as published Correct behavior P0935R0 C++11 default constructor was explicit made implicit See also operator= assigns values to the container adaptor (public member function) http://cppreference.com 2024.06.10 std::stack::stack(3)
NAME | Synopsis | Parameters | Type requirements | Complexity | Notes | Example | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::stack::stack&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
