Namespaces
Variants

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

関連項目

要素をその場で構築する
(公開メンバ関数)
要素の範囲を挿入する
(公開メンバ関数)