Namespaces
Variants

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

From cppreference.net

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

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

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

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

(до C++11)

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

(начиная с C++11)
Если first или last является итератором, указывающим на * this , поведение не определено.
3) Заменяет содержимое элементами из ilist .

Все итераторы, указатели и ссылки на элементы контейнера становятся недействительными.

Содержание

Параметры

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

Сложность

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

Пример

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

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

Вывод:

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

Отчеты о дефектах

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

DR Applied to Behavior as published Correct behavior
LWG 320 C++98 операция замены требовала реализации как
удаление всех существующих элементов с последующей вставкой заданных элементов
требование
удалено

Смотрите также

присваивает диапазон значений контейнеру
(публичная функция-член)
присваивает значения контейнеру
(публичная функция-член)