std::inplace_vector<T,N>:: insert
From cppreference.net
<
cpp
|
container
|
inplace vector
|
constexpr
iterator insert
(
const_iterator pos,
const
T
&
value
)
;
|
(1) | (C++26以降) |
|
constexpr
iterator insert
(
const_iterator pos, T
&&
value
)
;
|
(2) | (C++26以降) |
|
constexpr
iterator insert
(
const_iterator pos, size_type count,
const
T
&
value
)
;
|
(3) | (C++26以降) |
|
template
<
class
InputIt
>
constexpr iterator insert ( const_iterator pos, InputIt first, InputIt last ) ; |
(4) | (C++26以降) |
|
constexpr
iterator insert
(
const_iterator pos,
std::
initializer_list
<
T
>
ilist
)
;
|
(5) | (C++26以降) |
コンテナの指定された位置に要素を挿入します。
1)
pos
の前に
value
のコピーを挿入します。
2)
value
を
pos
の前に挿入します(ムーブセマンティクスを使用する可能性があります)。
3)
count
個の
value
のコピーを
pos
の前に挿入します。
4)
範囲
[
first
,
last
)
の要素を
pos
の前に挿入します。
このオーバーロードは、
InputIt
が
LegacyInputIterator
の場合にのみオーバーロード解決に参加します(オーバーロード
(3)
との曖昧さを回避するため)。
[
first
,
last
)
内の各イテレータは一度だけデリファレンスされます。
first
と
last
が
*
this
のイテレータである場合、動作は未定義です。
5)
初期化子リストから要素を挿入
ilist
を
pos
の前に挿入。次と等価:
insert
(
pos, ilist.
begin
(
)
, ilist.
end
(
)
)
;
.
| このセクションは不完全です |
目次 |
パラメータ
| pos | - |
コンテンツが挿入される前のイテレータ (
pos
は
end()
イテレータでも可)
|
| value | - | 挿入する要素の値 |
| count | - | 挿入する要素の数 |
| first, last | - | 挿入する要素のソース範囲を定義するイテレータのペア range |
| ilist | - | std::initializer_list から値を挿入 |
| 型要件 | ||
-
T
はオーバーロード(1)を使用するために
CopyInsertable
の要件を満たさなければならない
|
||
-
T
はオーバーロード(2)を使用するために
MoveInsertable
の要件を満たさなければならない
|
||
-
T
はオーバーロード(3)を使用するために
CopyAssignable
および
CopyInsertable
の要件を満たさなければならない
|
||
-
T
はオーバーロード(4,5)を使用するために
EmplaceConstructible
の要件を満たさなければならない
|
||
戻り値
1,2)
挿入された
value
を指すイテレータ。
3)
挿入された最初の要素を指すイテレータ、または
pos
が
count
==
0
の場合。
4)
挿入された最初の要素を指すイテレータ、または
pos
が
first
==
last
の場合。
5)
挿入された最初の要素を指すイテレータ、または
pos
が
ilist
空の場合。
計算量
挿入される要素の数に加えて、コンテナの
pos
と
end()
の間の距離に対して線形。
例外
- 呼び出し前に size ( ) == capacity ( ) の場合、 std::bad_alloc をスローする。この関数は副作用を持たない( 強い例外安全保証 )。
-
挿入される要素の初期化、または任意の
LegacyInputIterator
操作によってスローされる例外。
[ 0 ,pos)の要素は変更されない。
例
このコードを実行
#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); // オーバーロード (1) std::println("2. {}", v); v.insert(pos, 2, 300); // オーバーロード (3) std::println("3. {}", v); int arr[] = {501, 502, 503}; v.insert(v.begin(), arr, arr + std::size(arr)); // オーバーロード (4) std::println("4. {}", v); v.insert(v.end(), {601, 602, 603}); // オーバーロード (5) std::println("5. {}", v); const auto list = {-13, -12, -11}; try { v.insert(v.begin(), list); // スロー: 空き領域なし } catch(const std::bad_alloc&) { std::println("bad_alloc: v.capacity()={} < v.size()={} + list.size()={}", v.capacity(), v.size(), list.size()); } }
出力:
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
関連項目
|
要素をその場で構築する
(公開メンバ関数) |
|
|
要素の範囲を挿入する
(公開メンバ関数) |