std::inplace_vector<T,N>::insert
From cppreference.com
< 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) pos の前に value を挿入します。ムーブセマンティクスを使用する場合があります。
3) pos の前に value のコピーを count 個挿入します。
4) range
[first, last) の要素を pos の前に挿入します。このオーバーロードは、オーバーロード解決に参加するのは、InputIt が LegacyInputIterator である場合のみです(オーバーロード (3) との曖昧さを避けるため)。[first, last) 内の各イテレータは1回逆参照されます。 first と last が *this 内のイテレータである場合、動作は未定義です。
5) initializer list ilist の要素を pos の前に挿入します。これは以下と同等です: insert(pos, ilist.begin(), ilist.end());。
| このセクションは未完成です |
目次 |
[edit] パラメータ
| pos | - | コンテンツが挿入される前のイテレータ(pos は end() イテレータの場合もあります) |
| value | - | 挿入する要素の値 |
| count | - | 挿入する要素の数 |
| first, last | - | 挿入する要素のソース 範囲 を定義するイテレータのペア |
| ilist | - | 値を挿入するための std::initializer_list |
| 型要件 | ||
-オーバーロード (1) を使用するには、T は CopyInsertable の要件を満たす必要があります。 | ||
-オーバーロード (2) を使用するには、T は MoveInsertable の要件を満たす必要があります。 | ||
-オーバーロード (3) を使用するには、T は CopyAssignable および CopyInsertable の要件を満たす必要があります。 | ||
-オーバーロード (4,5) を使用するには、T は EmplaceConstructible の要件を満たす必要があります。 | ||
[edit] 戻り値
1,2) 挿入された value を指すイテレータ。
3) 挿入された最初の要素を指すイテレータ。または count = 0 の場合は pos。
4) 挿入された最初の要素を指すイテレータ。または first = last の場合は pos。
5) 挿入された最初の要素を指すイテレータ。または ilist が空の場合は pos。
[edit] 計算量
挿入される要素の数と、pos からコンテナの end() までの距離に対して線形。
[edit] 例外
- 呼び出し前に size() == capacity() の場合、std::bad_alloc をスローします。この関数は効果がなく(strong exception safety guarantee)。
- 挿入される要素の初期化、または任意の LegacyInputIterator 操作によってスローされる例外。
[0,pos)の要素は変更されません。
[edit] 例
このコードを実行
#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()); } }
出力
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
[edit] 関連項目
| 要素を直接構築する (公開メンバ関数) | |
| 要素の範囲を挿入する (公開メンバ関数) |