Spec-Zone.ru › C++

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

template< class... Args >
iterator emplace_after( const_iterator pos, Args&&... args );
(начиная с C++11)

Вставляет новый элемент в контейнер после указанной позиции. Элемент конструируется на месте, то есть операции копирования или перемещения не выполняются. Конструктор элемента вызывается с точно такими же аргументами, которые передаются функции.

Итераторы и ссылки не инвалидируются.

Параметры

pos - итератор, после которого будет сконструирован новый элемент
args - аргументы, передаваемые конструктору элемента

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

Итератор на новый элемент.

Сложность

Константная.

Исключения

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

Пример

В примере показано каноническое заполнение односвязного списка в естественном (в отличие от обратного) порядке.

#include <forward_list>
#include <iostream>
#include <string>

struct Sum
{
    std::string remark;
    int sum;

    Sum(std::string remark, int sum)
        : remark{std::move(remark)}, sum{sum} {}

    void print() const
    {
        std::cout << remark << " = " << sum << '\n';
    }
};

int main()
{
    std::forward_list<Sum> list;

    auto iter = list.before_begin();
    std::string str{"1"};

    for (int i{1}, sum{1}; i != 10; sum += i)
    {
        iter = list.emplace_after(iter, str, sum);
        ++i;
        str += " + " + std::to_string(i);
    }

    for (const Sum& s : list)
        s.print();
}

Вывод:

1 = 1
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10
1 + 2 + 3 + 4 + 5 = 15
1 + 2 + 3 + 4 + 5 + 6 = 21
1 + 2 + 3 + 4 + 5 + 6 + 7 = 28
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45

См. также

insert_after
вставляет элементы после элемента
(открытая функция-член)

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

Spec-Zone.ru

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