std::stack<T,Container>:: stack
From cppreference.net
|
stack
(
)
:
stack
(
Container
(
)
)
{
}
|
(1) | (начиная с C++11) |
| (2) | ||
|
explicit
stack
(
const
Container
&
cont
=
Container
(
)
)
;
|
(до C++11) | |
|
explicit
stack
(
const
Container
&
cont
)
;
|
(начиная с C++11) | |
|
explicit
stack
(
Container
&&
cont
)
;
|
(3) | (начиная с C++11) |
|
stack
(
const
stack
&
other
)
;
|
(4) | (неявно объявлен) |
|
stack
(
stack
&&
other
)
;
|
(5) |
(начиная с C++11)
(неявно объявлен) |
|
template
<
class
InputIt
>
stack ( InputIt first, InputIt last ) ; |
(6) | (начиная с C++23) |
|
template
<
class
Alloc
>
explicit stack ( const Alloc & alloc ) ; |
(7) | (начиная с C++11) |
|
template
<
class
Alloc
>
stack ( const Container & cont, const Alloc & alloc ) ; |
(8) | (начиная с C++11) |
|
template
<
class
Alloc
>
stack ( Container && cont, const Alloc & alloc ) ; |
(9) | (начиная с C++11) |
|
template
<
class
Alloc
>
stack ( const stack & other, const Alloc & alloc ) ; |
(10) | (начиная с C++11) |
|
template
<
class
Alloc
>
stack ( stack && other, const Alloc & alloc ) ; |
(11) | (начиная с C++11) |
|
template
<
class
InputIt,
class
Alloc
>
stack ( InputIt first, InputIt last, const Alloc & alloc ) ; |
(12) | (начиная с C++23) |
|
template
<
container-compatible-range
<
T
>
R
>
stack ( std:: from_range_t , R && rg ) ; |
(13) | (начиная с C++23) |
|
template
<
container-compatible-range
<
T
>
R,
class
Alloc
>
stack ( std:: from_range_t , R && rg, const Alloc & alloc ) ; |
(14) | (начиная с C++23) |
Создает новый базовый контейнер адаптера контейнера из различных источников данных.
1)
Конструктор по умолчанию. Выполняет инициализацию значениями контейнера.
2)
Копирует базовый контейнер
c
с содержимым
cont
.
Это также конструктор по умолчанию.
(до C++11)
3)
Перемещающий конструктор базового контейнера
c
с
std
::
move
(
cont
)
.
6)
Конструирует базовый контейнер
c
с содержимым диапазона
[
first
,
last
)
. Эта перегрузка участвует в разрешении перегрузки только если
InputIt
удовлетворяет требованиям
LegacyInputIterator
.
7-12)
Эти конструкторы участвуют в разрешении перегрузки только если
std::
uses_allocator
<
Container, Alloc
>
::
value
равно
true
, то есть если нижележащий контейнер является контейнером с поддержкой аллокатора (верно для всех контейнеров стандартной библиотеки, которые могут использоваться с
stack
).
7)
Создает базовый контейнер, используя
alloc
в качестве аллокатора, как если бы с помощью
c
(
alloc
)
.
8)
Создает базовый контейнер с содержимым
cont
и использует
alloc
в качестве аллокатора, как если бы было вызвано
c
(
cont, alloc
)
.
9)
Конструирует базовый контейнер с содержимым
cont
с использованием семантики перемещения, используя
alloc
в качестве аллокатора, как если бы
c
(
std
::
move
(
cont
)
, alloc
)
.
10)
Конструирует адаптер с содержимым
other.
c
и используя
alloc
в качестве аллокатора, как если бы
c
(
other.
c
, alloc
)
.
11)
Конструирует адаптер с содержимым
other
используя семантику перемещения с применением
alloc
в качестве аллокатора, как если бы
c
(
std
::
move
(
other.
c
)
, alloc
)
.
12)
Создает базовый контейнер с содержимым диапазона
[
first
,
last
)
используя
alloc
в качестве аллокатора, как если бы вызывалось
c
(
first, last, alloc
)
. Эта перегрузка участвует в разрешении перегрузки только если
InputIt
удовлетворяет требованиям
LegacyInputIterator
.
13)
Создает базовый контейнер с помощью
ranges::
to
<
Container
>
(
std::
forward
<
R
>
(
rg
)
)
.
14)
Создает базовый контейнер с помощью
ranges::
to
<
Container
>
(
std::
forward
<
R
>
(
rg
)
, alloc
)
.
Содержание |
Параметры
| alloc | - | аллокатор, используемый для всех выделений памяти базового контейнера |
| other | - | другой адаптер контейнера, используемый в качестве источника для инициализации базового контейнера |
| cont | - | контейнер, используемый в качестве источника для инициализации базового контейнера |
| first, last | - | пара итераторов, определяющая исходный диапазон элементов для инициализации |
| rg | - |
контейнерно-совместимый диапазон
, то есть
input_range
, элементы которого конвертируются в
T
|
| Требования к типам | ||
-
Alloc
должен соответствовать требованиям
Allocator
.
|
||
-
Container
должен соответствовать требованиям
Container
. Конструкторы, принимающие параметр аллокатора, участвуют в разрешении перегрузки только если
Container
соответствует требованиям
AllocatorAwareContainer
.
|
||
-
InputIt
должен соответствовать требованиям
LegacyInputIterator
.
|
||
Сложность
То же, что и соответствующая операция для обёрнутого контейнера.
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_adaptor_iterator_pair_constructor
|
202106L
|
(C++23) | Конструкторы с парой итераторов для std::queue и std::stack ; перегрузки ( 6 ) и ( 12 ) |
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Ориентированные на диапазоны конструкция и вставка; перегрузки ( 13 ) и ( 14 ) |
Пример
Запустить этот код
#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); // перегрузка (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, перегрузка (13) auto c5 = std::stack(std::from_range_t, std::ranges::iota(0, 42)); assert(c5.size() == 42); // тот же эффект с использованием синтаксиса конвейера, внутренне использует перегрузку (13) auto c6 = std::ranges::iota(0, 42) | std::ranges::to<std::stack>(); assert(c6.size() == 42); std::allocator<int> alloc; // C++23, перегрузка (14) auto c7 = std::stack(std::from_range_t, std::ranges::iota(0, 42), alloc); assert(c7.size() == 42); // тот же эффект с использованием синтаксиса конвейера, внутренне использует перегрузку (14) auto c8 = std::ranges::iota(0, 42) | std::ranges::to<std::stack>(alloc); assert(c8.size() == 42); # endif }
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P0935R0 | C++11 | default constructor was explicit | made implicit |
Смотрите также
|
присваивает значения адаптеру контейнера
(публичная функция-член) |