Spec-Zone.ru › C++

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

(1)
void assign( size_type count, const T& value );
(до C++20)
constexpr void assign( size_type count, const T& value );
(с C++20)
(2)
template< class InputIt >
void assign( InputIt first, InputIt last );
(до C++20)
template< class InputIt >
constexpr void assign( InputIt first, InputIt last );
(с C++20)
(3)
void assign( std::initializer_list<T> ilist );
(с C++11)
(до C++20)
constexpr void assign( std::initializer_list<T> ilist );
(с C++20)

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

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

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

(до C++11)

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

(с C++11)
3) Заменяет содержимое элементами из списка инициализации ilist.

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

Параметры

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

Сложность

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

Пример

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

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

Вывод:

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

См. также

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

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

Spec-Zone.ru

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