std::vector<T,Allocator>:: insert_range
|
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})); }
関連項目
|
要素を挿入する
(公開メンバ関数) |
|
|
(C++23)
|
要素の範囲を末尾に追加する
(公開メンバ関数) |