摘抄自
http://blog.csdn.net/bingxuebage/article/details/5729064
1. 介绍
使用前要注意加上头文件
#include<iterator>
迭代器实际上是一种泛化指针,如果一个迭代器指向了容器中的某一成员,那么迭代器将可以通过自增自减来遍历容器中的所有成员。迭代器是联系容器和算法的媒介,是算法操作容器的接口。在运用算法操作容器的时候,我们常常在不知不觉中已经使用了迭代器。
STL中定义了6种迭代器:
输入迭代器,在容器的连续区间内向前移动,可以读取容器内任意值;
输出迭代器,把值写进它所指向的队列成员中;
前向迭代器,读取队列中的值,并可以向前移动到下一位置(++p,p++);
双向迭代器,读取队列中的值,并可以向前向后遍历容器;
随机访问迭代器,
vector<T>::iterator,list<T>::iterator
等都是这种迭代器 ;流迭代器,可以直接输出、输入流中的值
2. 例程
下面的例子用到了输入输出迭代器
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> v1;
ifstream file1;
file1.open("D://test.txt");
if (file1.fail())
{
cout << "open file test.txt failed" << endl;
return 1;
}
/* vector<string>vec1(istream_iterator<string>(file1), istream_iterator<string>());
这种方式会报错,请问为什么*/
copy(istream_iterator<string>(file1), istream_iterator<string>(), inserter(v1, v1.begin()));
copy(v1.begin(),v1.end(), ostream_iterator<string>(cout, "\n"));
cout << endl;
return 0;
}
这里用到了输入迭代器istream_iterator,输出迭代器ostream_iterator。程序完成了将一个文件输出到屏幕的功能,先将文件读入,然后通过输入迭代器把文件内容复制到类型为字符串的向量容器内,最后由输出迭代器输出。Inserter是一个输入迭代器的一个函数(迭代器适配器),它的使用方法是:
inserter (container ,pos);
container是将要用来存入数据的容器,pos是容器存入数据的开始位置。上例中,是把文件内容存入(copy())到向量v1中。
函数注解:
1.ifstream
在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:
void open(const char* filename,int mode,int access);
如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:
file1.open("c://config.sys");
等价于file1.open("c://config.sys",ios::in|ios::out,0);
另外,fstream还有和open()一样的构造函数,对于上例,在定义的时侯就可以打开文件了:
fstream file1("c://config.sys");
2.copy函数用法
原型
copy(_InIt _First, _InIt _Last,_OutIt _Dest)
将容器中的元素从一个区间复制到另一个区间。_InIt _First, _InIt _Last,_OutIt _Dest 进行的是前向处理
详细参见
http://blog.csdn.net/ozwarld/article/details/8251808
STL copy()函数用法