std::inplace_vector<T,N>::insert
ja.cppreference.net より
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)
value のコピーを pos の前に挿入します。2)
value を pos の前に挿入します。ムーブセマンティクスが使用される可能性があります。3)
count 個の value のコピーを pos の前に挿入します。4) 範囲
[first, last) の要素を pos の前に挿入します。
このオーバーロードは、InputIt が LegacyInputIterator である場合にのみオーバーロード解決に参加します(オーバーロード (3) との曖昧さを避けるため)。[first, last) 内の各イテレータは1回だけ間接参照されます。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
関連項目
|
要素をその場で構築する
(公開メンバ関数) |
|
|
要素の範囲を挿入する
(公開メンバ関数) |