std::forward_list<T,Allocator>::emplace_after
template< class... Args > iterator emplace_after( const_iterator pos, Args&&... args ); | (since 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
См. также
| вставляет элементы после элемента (публичная функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/forward_list/emplace_after