您的位置:首页 > 其它

【STL】插入型迭代器(Insert Iterator)或插入器(inserter)

2014-05-07 15:41 344 查看
std::copy

如果要把一个序列(sequence)拷贝到一个容器(container)中去,通常用std::copy算法,代码如下:std::copy(start, end, std::back_inserter(container));

这里,start和end是输入序列(假设有N各元素)的迭代器(iterator),container是一个容器,该容器的接口包含函数push_back。假设container开始是空的,那么copy完毕后它就包含N个元素,并且顺序与原来队列中的元素顺序一样。标准库提供的back_inserter模板函数很方便,因为它为container返回一个back_insert_iterator迭代器,这样,复制的元素都被追加到container的末尾了。

copy()算法把每个源元素赋予目标对象,但并不知道它处理的目标对象是什么类型。copy()函数仅把要复制的对象传送给第三个参数指定的迭代器,并假定迭代器知道应把他们放在什么地方。这样,copy()函数就独立于源对象和它复制的目标对象。

1. 定义

插入型迭代器(Insert Iterator),又叫插入器(Inserter)。

2. 作用

插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作。

算法库对所有在容器上的操作有约束:决不修改容器的大小(不插入、不删除)。有了插入迭代器,既使得算法库可以通过迭代器对容器插入新的元素,又不违反这一统带,即保持了设计上的一致性。

3. 类型

3.1 尾部插入器(back_insert_iterator)

使用:通过调用容器的push_back()成员函数来插入元素

功能:在容器的尾端插入元素

限制:只有提供了push_back()成员函数的容器中

适用:vector deque list

3.2 头部插入器(front_insert_iterator)

使用:通过调用容器的push_front()成员函数来插入元素

功能:在容器的前端插入元素

限制:只有提供了push_front()成员函数的容器中

适用:deque list

3.3 普通插入器(insert_iterator)

使用:通过调用insert()成员函数来插入元素,并由用户指定插入位置

功能:在容器的指定位置插入元素

限制:所有STL容器都提供了insert()函数.

适用:所有STL容器

4. 例子

#include <iostream>

#include <vector>

#include <list>

#include <iterator>

using namespace std;

template<typename T>

void PrintElements(T c)

{

T::const_iterator itr = c.begin();

while(itr != c.end())

cout << *itr++ <<" ";

}

int main()

{

vector<int> vecSrc;

list<int> vecDest;

for(vector<int>::size_type i = 0; i < 3; ++i)

vecSrc.push_back(i);

copy(vecSrc.begin(), vecSrc.end(), back_insert_iterator<list<int> >(vecDest));

PrintElements(vecDest);

cout << endl;

copy(vecSrc.begin(), vecSrc.end(), front_insert_iterator<list<int> >(vecDest));

PrintElements(vecDest);

cout << endl;

copy(vecSrc.begin(), vecSrc.end(), insert_iterator<list<int> >(vecDest, ++vecDest.begin()));

PrintElements(vecDest);

return 0;

}

运行结果:

0 1 2

2 1 0 0 1 2

2 0 1 2 1 0 0 1 2 请按任意键继续.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: