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()函數用法
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章