Namespaces
Variants

std::vector<T,Allocator>:: insert_range

From cppreference.net

template < container-compatible-range < T > R >
constexpr iterator insert_range ( const_iterator pos, R && rg ) ;
(C++23以降)

rg 内の要素のコピーを、逆順にならない順序で pos の前に挿入します。

操作後に新しい size() が古い capacity() を超える場合、再割り当てが発生し、その場合すべてのイテレータ( end() イテレータを含む)と要素へのすべての参照が無効化されます。それ以外の場合、挿入ポイントより前のイテレータと参照のみが有効なままです。

範囲内の各イテレータは、 rg 正確に1回デリファレンスされます。

rg * this とオーバーラップする場合、動作は未定義です。

目次

パラメータ

pos - コンテンツが挿入される前のイテレータ ( pos end() イテレータでも可)
rg - コンテナ互換範囲 、すなわち要素が T に変換可能な input_range
型要件
-
以下のいずれかの条件が満たされる場合、動作は未定義です:

戻り値

* this に挿入された最初の要素を指すイテレータ、または rg が空の場合は pos を返します。

計算量

以下のいずれかの条件が満たされる場合、最大で1回の再割り当てを実行する:

(C++26以降)

注記

機能テスト マクロ 標準 機能
__cpp_lib_containers_ranges 202202L (C++23) Ranges-aware 構築と挿入

#include <algorithm>
#include <cassert>
#include <iterator>
#include <vector>
#include <list>
int main()
{
    auto container = std::vector{1, 2, 3, 4};
    auto pos = std::next(container.begin(), 2);
    assert(*pos == 3);
    const auto rg = std::list{-1, -2, -3};
#ifdef __cpp_lib_containers_ranges
    container.insert_range(pos, rg);
#else
    container.insert(pos, rg.cbegin(), rg.cend());
#endif
    assert(std::ranges::equal(container, std::vector{1, 2, -1, -2, -3, 3, 4}));
}

関連項目

要素を挿入する
(公開メンバ関数)
要素の範囲を末尾に追加する
(公開メンバ関数)