template <container-compatible-range<T> R>
constexpr iterator insert_range(const_iterator pos, R&& rg); // C++23
概要
Rangeの各要素を任意の位置に挿入する。
テンプレートパラメータ制約
型Tが*ranges::begin(rg)からvectorコンテナへのEmplaceConstructibleであり、かつ型TがMoveConstructible・MoveAssignable・Swappableであること。
効果
Rangergの各要素を、posの直前に挿入する。
戻り値
挿入されたRangergの最初の要素を指すイテレータ。rgが空の場合はpos。
計算量
再確保が発生する場合は要素を挿入した後のvectorの要素数に比例し、それ以外の場合は挿入された要素数 + posからvector末尾までの距離に比例する。
C++26 : Rがranges::approximately_sized_rangeであり、ranges::distance(rg) <= ranges::reserve_hint(rg)がtrueの場合、再確保は高々1回しか行われない。Rがranges::forward_rangeで、かつranges::approximately_sized_rangeではない場合も同様である。
例
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v = {1, 2, 3};
const int a[3] = {4, 5, 6};
// Rangeを1番目と2番目の要素の間に挿入
v.insert_range(std::next(v.begin()), a);
for (int i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
}
出力
1 4 5 6 2 3
関連項目
| 名前 | 説明 |
|---|---|
insert |
要素の挿入 |
emplace |
要素の直接構築による挿入 |
参照
- P2846R6
reserve_hint: Eagerly reserving memory for not-quite-sized lazy ranges- C++26で、
ranges::approximately_sized_rangeの要素数近似値を利用して再確保が高々1回に抑えられるよう計算量保証を追加
- C++26で、