std::inplace_vector<T,N>::assign
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.
Каждый итератор в диапазоне
[first, last) разыменовывается ровно один раз.
3) Заменяет содержимое элементами из
ilist.Параметры
| count | - | новый размер контейнера |
| value | - | значение для инициализации элементов контейнера |
| first, last | - | пара итераторов, определяющая исходный диапазон копируемых элементов |
| ilist | - | список инициализации, из которого копируются значения |
Сложность
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'); // overload (1)
std::println("{}", chars);
const char extra[3]{'a', 'b', 'c'};
chars.assign(std::cbegin(extra), std::cend(extra)); // overload (2)
std::println("{}", chars);
chars.assign({'C', '+', '+', '2', '6'}); // overload (3)
std::println("{}", chars);
try
{
chars.assign(8, 'x'); // throws: 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)); // throws
}
catch(const std::bad_alloc&) { std::println("std::bad_alloc #2"); }
try
{
const auto l = {'1', '2', '3', '4', '5', '6'};
chars.assign(l); // throws: 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
См. также
| присваивает контейнеру диапазон значений (открытая функция-член) |
|
| присваивает значения контейнеру (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/inplace_vector/assign