STL游标—迭代器(itertor)的使用

来源:互联网 发布:冰岛足球 知乎 编辑:程序博客网 时间:2024/06/06 13:25

摘抄自
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()函数用法
这里写图片描述