插入迭代器:insert iterator
- 头文件iterator
- 可以用来向容器插入元素。
- 一种迭代器适配器:关于适配器
- 支持的操作见下表:
插入迭代器的三种类型:
- back_inserter: 使用的是push_back
- front_inserter: 使用的是push_front
- inserter: 使用insert(但是和insert有点不同,具体见下文),接受第二个参数,这个参数必须是指向第一个参数表示的容器的迭代器。
插入器的工作过程:
最不好理解的是inserter,我们来详细看下inserter的工作过程。
- 当调用
inserter(c, iter)
,得到对应迭代器。 - 使用过程,我们将元素插入到iter原本所指向的元素的位置之前
- 然后再移动指针指向原本指向的元素
也就是说,如果it表示一个由inserter生成的迭代器。那么
it = val;
代码所执行的效果与:
it = c.insert(it,val); // it指向新加入的元素
++it; // 递增使得it指向原来的元素
的效果相同。
举例说明三种插入迭代器的不同:
std::vector<int> vec{1, 2, 3, 4, 5, 6, 7, 8, 9};
// uses inserter
list<int> lst1;
copy(vec.cbegin(), vec.cend(), inserter(lst1, lst1.begin()));
print(lst1);
// uses back_inserter
list<int> lit2;
copy(vec.cbegin(), vec.cend(), back_inserter(lit2));
print(lit2);
// uses front_inserter
list<int> lst3;
copy(vec.cbegin(), vec.cend(), front_inserter(lst3));
print(lst3);
输出结果: