函数模板
<iterator>

std::inserter

template <class Container, class Iterator>  insert_iterator<Container> inserter (Container& x, Iterator it);
template <class Container>  insert_iterator<Container> inserter (Container& x, typename Container::iterator it);
构造插入迭代器
构造一个插入迭代器,该迭代器将新元素插入到容器 x 中,从 it 指向的位置开始,连续插入。

插入迭代器是一种特殊的输出迭代器,它允许通常覆盖元素的 算法(如 copy)在容器中的特定位置自动插入新元素。

类型 x 需要有一个名为 insert 的成员函数(例如,大多数标准容器都有)。

使用返回的迭代器的赋值运算符(无论是解引用还是不解引用),都会导致对容器调用 insert,尝试在当前插入位置插入一个带有赋值值的元素。成功时,这会有效地将容器扩展一个元素。

返回的迭代器支持 输出迭代器 的所有其他典型操作,但这些操作没有实际效果:所有赋给它的值都会插入到当前插入位置——该位置在调用此函数后是 it,并且在每次通过对迭代器的赋值引起新插入后,该位置都会递增。

参数

x
迭代器将插入新元素的容器。
Container 应为一个定义了成员 insert 的容器类。
it
指向插入点的迭代器。
这应该是一个可变迭代器(而不是const迭代器)。

返回值

一个insert_iterator,它将元素插入到 xit 指示的位置。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// inserter example
#include <iostream>     // std::cout
#include <iterator>     // std::front_inserter
#include <list>         // std::list
#include <algorithm>    // std::copy

int main () {
  std::list<int> foo,bar;
  for (int i=1; i<=5; i++)
  { foo.push_back(i); bar.push_back(i*10); }

  std::list<int>::iterator it = foo.begin();
  advance (it,3);

  std::copy (bar.begin(),bar.end(),std::inserter(foo,it));

  std::cout << "foo contains:";
  for ( std::list<int>::iterator it = foo.begin(); it!= foo.end(); ++it )
	  std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

输出

1 2 3 10 20 30 40 50 4 5


数据竞争

除了通过获取其引用来访问容器(x)外,调用本身不会访问它,但返回的对象可用于访问或修改它。

异常安全

提供的保证级别与解引用 x 和复制 it 相同。

另见