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

来自cppreference.com
 
 
容器库
序列
(C++11)
关联
无序关联
适配器
视图
(C++20)
 
 
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

参阅

在某个元素后插入新元素
(公开成员函数)