插入迭代器在标准算法中的作用及使用方法

前言

  请问:算法能不能做一些改变容器基本大小的操作?要知道使用标准迭代器不会改变容器的大小,那么怎样让算法去做一些诸如往容器中插入元素的操作呢?答案很简单,使用“ 不标准 ”的迭代器呗!本文将介绍一种“ 非标准 ”迭代器 --- 插入迭代器,使用它和相关的标准算法就可以灵活的往容器中插入数据。

问题提出

  使用标准算法往任意顺序容器中插入一组元素。

错误示例

下面代码意图往一个顺序容器中插入10个0:

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     vector<int> vec;
10 
11     // 往vec中写入10个0
12     fill_n(vec.begin(), 10, 0);
13 
14     /*
15      * 输出容器
16     */
17     for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++)
18         cout << *it << " ";
19 
20     cout << endl;
21     
22     return 0;
23 }

运行结果:

算法参数vec.begin()是一个标准的迭代器,使用它作为参数不可能改变容器的大小,故试图往容器中插入数据的操作肯定会失败。

正确示例

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 // 使用非标准的迭代器都要包含这个头文件
 5 #include <iterator>
 6 
 7 using namespace std;
 8 
 9 int main()
10 {
11     vector<int> vec;
12     // 往vec中写入10个0,第一个参数是插入迭代器。
13     fill_n(back_inserter(vec), 10, 0);
14 
15     /*
16      * 输出容器
17     */
18     for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++)
19         cout << *it << " ";
20 
21     cout << endl;
22     
23     return 0;
24 }

运行结果:

使用了插入迭代器,问题自然迎刃而解。

后记

  除了本文示例中的fill_n算法外,其他算法只要涉及到往算法中插入元素,十有八九也得用到插入迭代器。比如copy算法等。

 

posted on 2013-07-30 20:17  空山悟  阅读(276)  评论(0编辑  收藏  举报

导航