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 разыменовывается ровно один раз.
Если rg пересекается с * this , поведение не определено.
Содержание |
Параметры
| pos | - |
итератор, перед которым будет вставлено содержимое (
pos
может быть итератором
end()
)
|
| rg | - |
совместимый с контейнером диапазон
container compatible range
, то есть
input_range
, элементы которого конвертируются в
T
|
| Требования к типам | ||
-
|
||
Возвращаемое значение
Итератор на первый элемент, вставленный в * this , или pos , если rg пуст.
СложностьЕсли удовлетворяется одно из следующих условий, выполняется не более одного перераспределения памяти:
|
(начиная с 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})); }
Смотрите также
|
вставляет элементы
(public member function) |
|
|
(C++23)
|
добавляет диапазон элементов в конец
(public member function) |