Spec-Zone.ru › C++

std::deque<T,Allocator>::assign

void assign( size_type count, const T& value );
(1)
template< class InputIt >
void assign( InputIt first, InputIt last );
(2)
void assign( std::initializer_list<T> ilist );
(3) (начиная с C++11)

Заменяет содержимое контейнера.

1) Заменяет содержимое count копиями значения value.
2) Заменяет содержимое копиями элементов диапазона [first, last).

Если любой из аргументов является итератором в *this, поведение не определено.

Эта перегрузка имеет тот же эффект, что и перегрузка (1), если InputIt является целочисленным типом.

(до C++11)

Эта перегрузка участвует в разрешении перегрузки, только если InputIt удовлетворяет требованиям LegacyInputIterator.

(начиная с C++11)
Каждый итератор в диапазоне [first, last) разыменовывается ровно один раз.
3) Заменяет содержимое элементами из ilist.

Все итераторы (включая итератор end()) и все ссылки на элементы становятся недействительными.

Параметры

count - новый размер контейнера
value - значение, которым инициализируются элементы контейнера
first, last - пара итераторов, задающая исходный диапазон элементов для копирования
ilist - список инициализации, из которого копируются значения

Сложность

1) Линейная относительно count.
2) Линейная относительно расстояния между first и last.
3) Линейная относительно ilist.size().

Пример

В следующем примере для добавления нескольких символов в std::deque<char> используется assign:

#include <deque>
#include <iostream>
#include <string>

int main()
{
    std::deque<char> characters;
    
    auto print_deque = [&]()
    {
        for (char c : characters)
            std::cout << c << ' ';
        std::cout << '\n';
    };
    
    characters.assign(5, 'a');
    print_deque();
    
    const std::string extra(6, 'b');
    characters.assign(extra.begin(), extra.end());
    print_deque();
    
    characters.assign({'C', '+', '+', '1', '1'});
    print_deque();
}

Вывод:

a a a a a
b b b b b b
C + + 1 1

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.

DR Применён к Опубликованное поведение Корректное поведение
LWG 2209 C++98 требовалось реализовать операцию замены как
удаление всех существующих элементов с последующей вставкой заданных элементов
требование
удалено

См. также

assign_range
(C++23)
присваивает контейнеру диапазон значений
(открытая функция-член)
operator=
присваивает значения контейнеру
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/deque/assign

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API