Namespaces
Variants

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

From cppreference.net

template < container-compatible-range < T > R >
constexpr iterator insert_range ( const_iterator pos, R && rg ) ;
(C++26以降)
HTMLタグ、属性、コードブロック内のテキストは翻訳せず、C++固有の用語もそのまま保持しました。「since C++26」のみを「C++26以降」に翻訳し、その他の書式設定は完全に維持しています。

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

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

rg * this と重複する場合、動作は未定義です。

目次

パラメータ

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

戻り値

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

例外

  • std::bad_alloc 、もし ranges:: distance ( rg ) + size ( ) > capacity ( ) の場合。 * this の要素は変更されない。
  • 挿入操作(すなわち T のコピー/ムーブコンストラクタ、ムーブ/コピー代入演算子)または任意の LegacyInputIterator 操作によって送出される例外。 * this [ 0 , pos ) 範囲内の要素は変更されない。

#include <cassert>
#include <inplace_vector>
#include <iterator>
#include <new>
#include <print>
int main()
{
    auto v = std::inplace_vector<int, 8>{0, 1, 2, 3};
    auto pos = std::next(v.begin(), 2);
    assert(*pos == 2);
    const auto rg = {-1, -2, -3};
    v.insert_range(pos, rg);
    std::println("{}", v);
    try
    {
        assert(v.size() + rg.size() > v.capacity());
        v.insert_range(pos, rg); // throws: no space
    }
    catch(const std::bad_alloc& ex)
    {
        std::println("{}", ex.what());
    }
}

出力例:

[0, 1, -1, -2, -3, 2, 3]
std::bad_alloc

関連項目

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