std::inplace_vector<T,N>:: insert
From cppreference.com
<
cpp
|
container
|
inplace vector
constexpr
iterator insert
(
const_iterator pos,
const
T
&
value
)
;
|
(1) | (since C++26) |
constexpr
iterator insert
(
const_iterator pos, T
&&
value
)
;
|
(2) | (since C++26) |
constexpr
iterator insert
(
const_iterator pos, size_type count,
const
T
&
value
)
;
|
(3) | (since C++26) |
template
<
class
InputIt
>
constexpr iterator insert ( const_iterator pos, InputIt first, InputIt last ) ; |
(4) | (since C++26) |
constexpr
iterator insert
(
const_iterator pos,
std::
initializer_list
<
T
>
ilist
)
;
|
(5) | (since C++26) |
Inserts elements at the specified location in the container.
1)
Inserts a copy of
value
before
pos
.
2)
Inserts
value
before
pos
, possibly using move semantics.
3)
Inserts
count
copies of the
value
before
pos
.
4)
Inserts elements from range
[
first
,
last
)
before
pos
.
This overload participates in overload resolution only if
InputIt
is
LegacyInputIterator
(to avoid ambiguity with the overload
(3)
).
Each iterator in
[
first
,
last
)
is dereferenced once.
If
first
and
last
are iterators into
*
this
, the behavior is undefined.
5)
Inserts elements from initializer list
ilist
before
pos
. Equivalent to:
insert
(
pos, ilist.
begin
(
)
, ilist.
end
(
)
)
;
.
Parameters
pos | - |
iterator before which the content will be inserted (
pos
may be the
end()
iterator)
|
value | - | element value to insert |
count | - | number of elements to insert |
first, last | - | the range of elements to insert |
ilist | - | std::initializer_list to insert the values from |
Type requirements | ||
-
T
must meet the requirements of
CopyInsertable
in order to use overload (1).
|
||
-
T
must meet the requirements of
MoveInsertable
in order to use overload (2).
|
||
-
T
must meet the requirements of
CopyAssignable
and
CopyInsertable
in order to use overload (3).
|
||
-
T
must meet the requirements of
EmplaceConstructible
in order to use overloads (4,5).
|
Return value
1,2)
Iterator pointing to the inserted
value
.
3)
Iterator pointing to the first element inserted, or
pos
if
count
==
0
.
4)
Iterator pointing to the first element inserted, or
pos
if
first
==
last
.
5)
Iterator pointing to the first element inserted, or
pos
if
ilist
is empty.
Complexity
Linear in the number of elements inserted plus the distance between
pos
and
end()
of the container.
Exceptions
- Throws std::bad_alloc if before invocation size ( ) == capacity ( ) . The function has no effects ( strong exception safety guarantee ).
-
Any exception thrown by initialization of inserted element or by any
LegacyInputIterator
operation. Elements in
[
0 ,
pos)
are not modified.
Example
Run this code
#include <initializer_list> #include <inplace_vector> #include <iterator> #include <new> #include <print> int main() { std::inplace_vector<int, 14> v(3, 100); std::println("1. {}", v); auto pos = v.begin(); pos = v.insert(pos, 200); // overload (1) std::println("2. {}", v); v.insert(pos, 2, 300); // overload (3) std::println("3. {}", v); int arr[] = {501, 502, 503}; v.insert(v.begin(), arr, arr + std::size(arr)); // overload (4) std::println("4. {}", v); v.insert(v.end(), {601, 602, 603}); // overload (5) std::println("5. {}", v); const auto list = {-13, -12, -11}; try { v.insert(v.begin(), list); // throws: no space } catch(const std::bad_alloc&) { std::println("bad_alloc: v.capacity()={} < v.size()={} + list.size()={}", v.capacity(), v.size(), list.size()); } }
Output:
1. [100, 100, 100] 2. [200, 100, 100, 100] 3. [300, 300, 200, 100, 100, 100] 4. [501, 502, 503, 300, 300, 200, 100, 100, 100] 5. [501, 502, 503, 300, 300, 200, 100, 100, 100, 601, 602, 603] bad_alloc: v.capacity()=14 < v.size()=12 + list.size()=3
See also
constructs element in-place
(public member function) |
|
inserts a range of elements
(public member function) |