Namespaces
Variants

std::inplace_vector<T,N>:: insert

From 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) 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

関連項目

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