c++在stream中使用iterator

来源:互联网 发布:休闲西服 知乎 编辑:程序博客网 时间:2024/05/19 23:56


1.在stream中使用iterator,可以方便与stl容器和算法操作;


2.stream的iterator和普通的容器iterator不同之处为

      2.1 , 需要include <iterator>;

      2.2,  声明为istream_iterator<T> name(stream) 和 ostream_iterator<T> name(stream);

      2.3, 可用于iostream 派生的所有stream;

      2.4,    stream结束符用 istream_iterator<T> name;  或 istream_iterator<T> ();  表示



示例:

     1. 在包含括号的txt中 找到 最里层的数据 例如 在如下 test.txt 中 找到 D

/*test.txt*/a(b((c(D)e)f))

        代码如下:

       

#include <fstream>#include <iterator>#include <iostream>#include <vector>using namespace std;int main(){    fstream file("test.txt");    istream_iterator<char> iter(file);    vector<char> que;    while(iter != istream_iterator<char>()/*istream_iterator<char> eof*/)    {        if(*iter == '(')        {            que.clear();            que.push_back(*iter);        }        else if(*iter == ')')        {            if(que.size() > 1)                for(vector<char>::iterator it = que.begin()+1; it != que.end(); ++it)                    cout<<*it<<endl;            que.clear();        }        else        {            if(!que.empty())                que.push_back(*iter);        }        ++iter;    }    /*直接使用fstream成员函数的方法    while(!file.eof())    {        i++;        char t = file.get();        if(t == '(')        {            que.clear();            que.push_back(t);        }        else if(t == ')')        {            if(que.size() > 1)                for(vector<char>::iterator it = que.begin()+1; it != que.end(); ++it)                    cout<<*it<<endl;            que.clear();        }        else        {            if(!que.empty())                que.push_back(t);        }    }    */    file.close();    return 0;}

运用 算法 函数 for_each

#include <fstream>#include <iterator>#include <iostream>#include <vector>#include <algorithm>using namespace std;class SearchInerChar{public:    void operator()(char c)    {        if(c == '(')        {            que.clear();            que.push_back(c);        }        else if(c == ')')        {            if(que.size() > 1)                for(vector<char>::iterator it = que.begin()+1; it != que.end(); ++it)                    cout<<*it<<endl;            que.clear();        }        else        {            if(!que.empty())                que.push_back(c);        }    }private:    vector<char> que;} innerChar;int main(){    fstream file("test.txt");    istream_iterator<char> iter(file);        for_each(iter, istream_iterator<char>(), innerChar);    file.close();    return 0;}


--

by standfly

2013-07-06