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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值