名前空間
変種
操作

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

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

rg の要素のコピーを、反転させずに pos の前に挿入します。

rg の各イテレータはちょうど1回逆参照されます。

rg はコンテナと重複してはいけません。重複した場合、動作は未定義となります。

目次

[編集] パラメータ

pos - 要素が挿入される前のイテレータ(posend() イテレータでもよい)
rg - コンテナ互換範囲。つまり、要素が T に変換可能な input_range
型要件
-
T は、*ranges::begin(rg) から inplace_vectorEmplaceConstructible である必要がある。そうでなければ、動作は未定義である。

[編集] 戻り値

inplace_vector に挿入された最初の要素のコピー、または rg が空の場合は pos を指す iterator

例外

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

[編集]

#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

[編集] 関連項目

要素を挿入する
(public member function)
末尾に要素の範囲を追加する
(public member function)
末尾に要素の範囲を追加しようと試みる
(public member function)
English 日本語 中文(简体) 中文(繁體)