Spec-Zone.ru › C++

std::forward_list<T,Allocator>::insert_after

iterator insert_after( const_iterator pos, const T& value );
(1) (since C++11)
iterator insert_after( const_iterator pos, T&& value );
(2) (since C++11)
iterator insert_after( const_iterator pos, size_type count, const T& value );
(3) (since C++11)
template< class InputIt >
iterator insert_after( const_iterator pos, InputIt first, InputIt last );
(4) (since C++11)
iterator insert_after( const_iterator pos, std::initializer_list<T> ilist );
(5) (since C++11)

Вставляет элементы после указанной позиции в контейнер.

1,2) Вставляет value после элемента, на который указывает pos.
3) Вставляет count копий value после элемента, на который указывает pos.
4) Вставляет элементы из диапазона [first, last) после элемента, на который указывает pos. Поведение не определено, если first и last являются итераторами в *this.
5) Вставляет элементы из списка инициализации ilist.

Никакие итераторы или ссылки не становятся недействительными.

Параметры

pos - итератор после которого будет вставлено содержимое
value - значение вставляемого элемента
count - количество копий для вставки
first, last - диапазон вставляемых элементов
ilist - список инициализации, значения из которого необходимо вставить
Требования к типу
-InputIt должно соответствовать требованиям LegacyInputIterator.

Возвращаемое значение

1,2) Итератор на вставленный элемент.
3) Итератор на последний вставленный элемент, или pos если count == 0.
4) Итератор на последний вставленный элемент, или pos если first == last.
5) Итератор на последний вставленный элемент, или pos если ilist пуст.

Исключения

Если происходит сброс исключения по какой-либо причине, эти функции не имеют эффекта (гарантия устойчивости к исключениям).

Сложность

1,2) Постоянная.
3) Линейная по count.
4) Линейная по std::distance(first, last).
5) Линейная по ilist.size().

Пример

#include <forward_list>
#include <iostream>
#include <string>
#include <vector>
 
void print(const std::forward_list<int>& list)
{
    std::cout << "list: {";
    for (char comma[3] = {'\0', ' ', '\0'}; int i : list)
    {
        std::cout << comma << i;
        comma[0] = ',';
    }
    std::cout << "}\n";
}
 
int main()
{
    std::forward_list<int> ints{1, 2, 3, 4, 5};
    print(ints);
 
    // insert_after (2)
    auto beginIt = ints.begin();
    ints.insert_after(beginIt, -6);
    print(ints);
 
    // insert_after (3)
    auto anotherIt = beginIt;
    ++anotherIt;
    anotherIt = ints.insert_after(anotherIt, 2, -7);
    print(ints);
 
    // insert_after (4)
    const std::vector<int> v = {-8, -9, -10};
    anotherIt = ints.insert_after(anotherIt, v.cbegin(), v.cend());
    print(ints);
 
    // insert_after (5)
    ints.insert_after(anotherIt, {-11, -12, -13, -14});
    print(ints);
}

Вывод:

list: {1, 2, 3, 4, 5}
list: {1, -6, 2, 3, 4, 5}
list: {1, -6, -7, -7, 2, 3, 4, 5}
list: {1, -6, -7, -7, -8, -9, -10, 2, 3, 4, 5}
list: {1, -6, -7, -7, -8, -9, -10, -11, -12, -13, -14, 2, 3, 4, 5}

См. также

emplace_after
создает элементы на месте после элемента
(public member function)
push_front
вставляет элемент в начало
(public member function)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/forward_list/insert_after

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API