std::inplace_vector<T,N>::assign
From cppreference.com
< cpp | container | inplace vector
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Containers library
(C++17)
(C++11)
(C++26)
(C++26)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++23)
(C++23)
(C++23)
(C++23)
(C++20)
(C++23)
Tables
std::inplace_vector
inplace_vector::assign
constexpr void assign( size_type count, const T& value );
(1)
(since C++26)
template< class InputIt >
constexpr void assign( InputIt first, InputIt last );
(2)
(since C++26)
constexpr void assign( InputIt first, InputIt last );
constexpr void assign( std::initializer_list <T> ilist );
(3)
(since C++26)
Replaces the contents of the container.
1) Replaces the contents with count copies of value value.
2) Replaces the contents with copies of those in the range
[
first,
last)
. This overload participates in overload resolution only if
InputIt
satisfies the requirements of LegacyInputIterator. If first or last is an iterator into *this, the behavior is undefined.
3) Replaces the contents with the elements from ilist.
This section is incomplete
[edit] Parameters
count
-
the new size of the container
value
-
the value to initialize elements of the container with
first, last
-
the pair of iterators defining the source range of elements to copy
ilist
-
std::initializer_list to copy the values from
[edit] Complexity
1) Linear in count.
2) Linear in distance between first and last.
3) Linear in ilist.size().
Exceptions
1-3) Any exception thrown by initialization of inserted elements.
[edit] Example
The following code uses assign
to add several characters to a std::inplace_vector <char, 5>:
Run this code
#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"); } }
Output:
['a', 'a', 'a', 'a'] ['a', 'b', 'c'] ['C', '+', '+', '2', '6'] std::bad_alloc #1 std::bad_alloc #2 std::bad_alloc #3