insert_iterator为迭代器适配器,用于封装传统迭代器来提供更为丰富的功能。
insert_iterator内部维护了两个变量:
_Container* container
:指向插入的目标容器
_Container::iterator iter
:插入位置记录
其实质上就是调用container->insert
源码分析如下:
template<typename _Container> // _Container 表示传入的容器类型
class insert_iterator
: public iterator<output_iterator_tag, void, void, void, void>
{
protected:
_Container* container; // 定义容器指针,用于保存容器
typename _Container::iterator iter; // 定义容器迭代器 it,此迭代器只是普通的输入输出迭代器
public:
/// A nested typedef for the type of whatever container you used.
typedef _Container container_type;
/**
* The only way to create this %iterator is with a container and an
* initial position (a normal %iterator into the container).
*/
/**
* 使用container和初始位置是创建此迭代器的唯一方式
*/
insert_iterator(_Container& __x, typename _Container::iterator __i)
: container(std::__addressof(__x)), iter(__i) {
} // 初始化container 和 iter
/**
* @param __value An instance of whatever type
* container_type::const_reference is; presumably a
* reference-to-const T for container<T>.
* @return This %iterator, for chained operations.
*
* This kind of %iterator maintains its own position in the
* container. Assigning a value to the %iterator will insert the
* value into the container at the place before the %iterator.
*
* The position is maintained such that subsequent assignments will
* insert values immediately after one another. For example