std::deque<T,Allocator>:: deque
|
deque
(
)
:
deque
(
Allocator
(
)
)
{
}
|
(1) |
(начиная с C++11)
(constexpr начиная с C++26) |
| (2) | ||
|
explicit
deque
(
const
Allocator
&
alloc
=
Allocator
(
)
)
;
|
(до C++11) | |
|
explicit
deque
(
const
Allocator
&
alloc
)
;
|
(начиная с C++11)
(constexpr начиная с C++26) |
|
|
explicit
deque
(
size_type count,
const Allocator & alloc = Allocator ( ) ) ; |
(3) |
(начиная с C++11)
(constexpr начиная с C++26) |
| (4) | ||
|
explicit
deque
(
size_type count,
const
T
&
value
=
T
(
)
,
const Allocator & alloc = Allocator ( ) ) ; |
(до C++11) | |
|
deque
(
size_type count,
const
T
&
value,
const Allocator & alloc = Allocator ( ) ) ; |
(начиная с C++11)
(constexpr начиная с C++26) |
|
|
template
<
class
InputIt
>
deque
(
InputIt first, InputIt last,
|
(5) | (constexpr начиная с C++26) |
|
template
<
container-compatible-range
<
T
>
R
>
deque
(
std::
from_range_t
, R
&&
rg,
|
(6) |
(начиная с C++23)
(constexpr начиная с C++26) |
|
deque
(
const
deque
&
other
)
;
|
(7) | (constexpr начиная с C++26) |
|
deque
(
deque
&&
other
)
;
|
(8) |
(начиная с C++11)
(constexpr начиная с C++26) |
| (9) | ||
|
deque
(
const
deque
&
other,
const
Allocator
&
alloc
)
;
|
(начиная с C++11)
(до C++23) |
|
|
deque
(
const
deque
&
other,
const std:: type_identity_t < Allocator > & alloc ) ; |
(начиная с C++23)
(constexpr начиная с C++26) |
|
| (10) | ||
|
deque
(
deque
&&
other,
const
Allocator
&
alloc
)
;
|
(начиная с C++11)
(до C++23) |
|
|
deque
(
deque
&&
other,
const
std::
type_identity_t
<
Allocator
>
&
alloc
)
;
|
(начиная с C++23)
(constexpr начиная с C++26) |
|
|
deque
(
std::
initializer_list
<
T
>
init,
const Allocator & alloc = Allocator ( ) ) ; |
(11) |
(начиная с C++11)
(constexpr начиная с C++26) |
Создает новый
deque
из различных источников данных, опционально используя предоставленный пользователем аллокатор
alloc
.
deque
с аллокатором, созданным по умолчанию.
deque
с заданным аллокатором
alloc
.
deque
с
count
объектами типа
T
, вставленными по умолчанию. Копирование не выполняется.
deque
с
count
копиями элементов со значением
value
.
|
Если
|
(since C++11) |
deque
с содержимым диапазона
[
first
,
last
)
. Каждый итератор в
[
first
,
last
)
разыменовывается ровно один раз.
|
Если
|
(до C++11) |
|
Эта перегрузка участвует в разрешении перегрузки только если
Если
|
(начиная с C++11) |
deque
с содержимым диапазона
rg
. Каждый итератор в
rg
разыменовывается ровно один раз.
T
не является
EmplaceConstructible
в
deque
из
*
ranges::
begin
(
rg
)
, поведение не определено.
deque
с содержимым
other
.
|
Аллокатор получается как если бы вызывался
|
(начиная с C++11) |
deque
с содержимым
other
. Аллокатор получается путем перемещения из
other.
get_allocator
(
)
.
Содержание |
Параметры
| alloc | - | аллокатор, используемый для всех выделений памяти этого контейнера |
| count | - | размер контейнера |
| value | - | значение для инициализации элементов контейнера |
| first, last | - | пара итераторов, определяющая исходный диапазон элементов для копирования |
| other | - | другой контейнер, используемый в качестве источника для инициализации элементов контейнера |
| init | - | список инициализации для инициализации элементов контейнера |
| rg | - | диапазон, совместимый с контейнером |
Сложность
Исключения
Вызовы Allocator :: allocate могут генерировать исключения.
Примечания
После перемещающего конструирования контейнера (перегрузки ( 8 ) и ( 10 ) ), ссылки, указатели и итераторы (кроме конечного итератора) на other остаются действительными, но ссылаются на элементы, которые теперь находятся в * this . Текущий стандарт обеспечивает эту гарантию с помощью общего положения в [container.reqmts]/67 , и более прямая гарантия рассматривается через LWG issue 2321 .
| Feature-test макрос | Значение | Стандарт | Функциональность |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Ranges-aware конструирование и вставка; перегрузка ( 6 ) |
Пример
#include <deque> #include <iostream> #include <string> template<typename T> std::ostream& operator<<(std::ostream& s, const std::deque<T>& v) { s.put('{'); for (char comma[]{'\0', ' ', '\0'}; const auto& e : v) s << comma << e, comma[0] = ','; return s << "}\n"; } int main() { // Синтаксис списка инициализации C++11: std::deque<std::string> words1{"the", "frogurt", "is", "also", "cursed"}; std::cout << "1: " << words1; // words2 == words1 std::deque<std::string> words2(words1.begin(), words1.end()); std::cout << "2: " << words2; // words3 == words1 std::deque<std::string> words3(words1); std::cout << "3: " << words3; // words4 is {"Mo", "Mo", "Mo", "Mo", "Mo"} std::deque<std::string> words4(5, "Mo"); std::cout << "4: " << words4; const auto rg = {"cat", "cow", "crow"}; #ifdef __cpp_lib_containers_ranges std::deque<std::string> words5(std::from_range, rg); // перегрузка (6) #else std::deque<std::string> words5(rg.begin(), rg.end()); // перегрузка (5) #endif std::cout << "5: " << words5; }
Вывод:
1: {the, frogurt, is, also, cursed}
2: {the, frogurt, is, also, cursed}
3: {the, frogurt, is, also, cursed}
4: {Mo, Mo, Mo, Mo, Mo}
5: {cat, cow, crow}
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Исправленное поведение |
|---|---|---|---|
| LWG 144 | C++98 |
требование сложности для перегрузки
(
5
)
было таким же
как у соответствующей перегрузки std::vector |
изменено на линейную сложность |
| LWG 237 | C++98 |
требование сложности для перегрузки
( 5 ) было линейным по first - last |
изменено на линейное по
std:: distance ( first, last ) |
| LWG 438 | C++98 |
перегрузка
(
5
)
вызывала перегрузку
(
4
)
только если
InputIt
является целочисленным типом
|
вызывает перегрузку
(
4
)
если
InputIt
не является LegacyInputIterator |
| LWG 2193 | C++11 | конструктор по умолчанию был explicit | сделан не-explicit |
| LWG 2210 | C++11 | перегрузка ( 3 ) не имела параметра аллокатора | параметр добавлен |
| N3346 | C++11 |
для перегрузки
(
3
)
, элементы в
контейнере были value-initialized |
они default-inserted |
Смотрите также
|
присваивает значения контейнеру
(public member function) |
|
|
присваивает значения контейнеру
(public member function) |