std::inplace_vector<T,N>::assign
Из ru.cppreference.net
constexpr void assign( size_type count, const T& value );
|
(1) | (начиная с C++26) |
template< class InputIt >
constexpr void assign( InputIt first, InputIt last );
|
(2) | (начиная с C++26) |
constexpr void assign( std::initializer_list<T> ilist );
|
(3) | (начиная с C++26) |
Заменяет содержимое контейнера.
1) Заменяет содержимое на
count копий value.2) Заменяет содержимое копиями элементов из диапазона
[first, last). Если любой из аргументов является итератором в
*this, поведение не определено.
Эта перегрузка участвует в разрешении перегрузки только если InputIt удовлетворяет LegacyInputIterator.3) Заменяет содержимое элементами из
ilist.| Этот раздел неполон |
Параметры
| count | - | новый размер контейнера |
| value | - | значение для инициализации элементов контейнера |
| first, last | - | пара итераторов, определяющая исходный диапазон элементов для копирования |
| ilist | - | std::initializer_list для копирования значений |
Сложность
1)
Линейная по
count
.
2)
Линейно по расстоянию между
first
и
last
.
3)
Линейно от
ilist.
size
(
)
.
Исключения
1-3)
Любое исключение, выброшенное при инициализации вставляемых элементов.
Пример
Следующий код использует
assign
для добавления нескольких символов в
std::
inplace_vector
<
char
,
5
>
:
Запустить этот код
#include <inplace_vector> #include <iterator> #include <new> #include <print> int main() { std::inplace_vector<char, 5> chars; chars.assign(4, 'a'); // перегрузка (1) std::println("{}", chars); const char extra[3]{'a', 'b', 'c'}; chars.assign(std::cbegin(extra), std::cend(extra)); // перегрузка (2) std::println("{}", chars); chars.assign({'C', '+', '+', '2', '6'}); // перегрузка (3) std::println("{}", chars); try { chars.assign(8, 'x'); // выбрасывает исключение: count > chars.capacity() } catch(const std::bad_alloc&) { std::println("std::bad_alloc #1"); } try { const char bad[8]{'?'}; // ranges::distance(bad) > chars.capacity() chars.assign(std::cbegin(bad), std::cend(bad)); // выбрасывает исключение } catch(const std::bad_alloc&) { std::println("std::bad_alloc #2"); } try { const auto l = {'1', '2', '3', '4', '5', '6'}; chars.assign(l); // выбрасывает исключение: l.size() > chars.capacity() } catch(const std::bad_alloc&) { std::println("std::bad_alloc #3"); } }
Вывод:
['a', 'a', 'a', 'a'] ['a', 'b', 'c'] ['C', '+', '+', '2', '6'] std::bad_alloc #1 std::bad_alloc #2 std::bad_alloc #3
Смотрите также
|
присваивает диапазон значений контейнеру
(public member function) |
|
|
присваивает значения контейнеру
(public member function) |