std::forward_list<T,Allocator>:: insert_range_after
From cppreference.net
<
cpp
|
container
|
forward list
|
template
<
container-compatible-range
<
T
>
R
>
iterator insert_range_after ( const_iterator pos, R && rg ) ; |
(начиная с C++23)
(constexpr начиная с C++26) |
|
Вставляет копии элементов из диапазона rg после pos . Каждый итератор в диапазоне rg разыменовывается ровно один раз.
Если выполняется любое из следующих условий, поведение не определено:
-
Tне является EmplaceConstructible вforward_listиз * ranges:: begin ( rg ) . -
pos
не находится в диапазоне
[before_begin(),end()). - rg и * this пересекаются.
Никакие итераторы или ссылки не становятся недействительными.
Содержание |
Параметры
| pos | - | итератор, после которого будет вставлено содержимое |
| rg | - |
container compatible range
, то есть
input_range
, элементы которого конвертируются в
T
|
Возвращаемое значение
Итератор на последний вставленный элемент, или pos если rg пуст.
Сложность
Линейный по размеру rg .
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Ranges-aware конструирование и вставка |
Пример
Запустить этот код
#include <algorithm> #include <cassert> #include <forward_list> #include <iterator> #include <vector> int main() { auto container = std::forward_list{1, 2, 3, 4}; auto pos = std::next(container.cbegin()); assert(*pos == 2); const auto rg = std::vector{-1, -2, -3}; #ifdef __cpp_lib_containers_ranges container.insert_range_after(pos, rg); #else container.insert_after(pos, rg.cbegin(), rg.cend()); #endif assert(std::ranges::equal(container, std::vector{1, 2, -1, -2, -3, 3, 4})); }
Смотрите также
|
(C++23)
|
добавляет диапазон элементов в начало
(public member function) |
|
вставляет элементы после элемента
(public member function) |
|
|
конструирует элементы на месте после элемента
(public member function) |