zoukankan      html  css  js  c++  java
  • C++流迭代器

    1.输入流迭代器istream_iterator

    (1)创建一个输入流迭代器的时候必须指定输入流迭代器读取的类型,该类型必须定义了输入运算符>>。

    std::istream_iterator<int> int_it;
    (2)从文件中读取数据到输入流中
    std::ifstream in("./test.txt");
    std::istream_iterator<int> int_it(in);
    (3)控制台读取数据到输入流中
    std::istream_iterator<int> int_it(std::cin);
    (4)获取输入流中的数据
    std::istream_iterator<int> int_eof;//定义一个空的相同类型的输入流迭代器作为尾后迭代器,用于判断输入迭代器位置是否已经到了末尾
        while(int_it!=int_eof){
            cout<<*int_it<<endl;//*int_it则为当前输入流迭代器位置的值
            int_it++;//迭代器位置后移
        }
    (5)将输入流中的数据导入到一个vector容器中,可以使用获取输入流中的数据的方式遍历的时候一个个push_back到vector容器中,这里介绍一种简单的写法:
    vector<int> vec(int_it,int_eof);//使用迭代器范围构造vector
    (6)同样可以将输入流迭代器的起始位置,作为很多通用算法的输入参数,进行算法操作。如求和算法:
    auto total = std::accumulate(int_it,int_eof,0);
     
    2.输出流迭代器ostream_iterator

    (1)创建一个输出流迭代器的时候必须指定输出流迭代器读取的类型,该类型必须定义了输出运算符<<。

    std::ostream_iterator<int>int_os (std::cout);
    (2)使用输出流迭代器将vec中的输入输出到控制台,给输入迭代器赋值就相当于将其输入
     std::ostream_iterator<int>int_os (std::cout);
        std::vector<int> vec{1,2,3,4,5,6};
        for(auto item :vec){//下面大括号中的两行代码可以直接写为int_os=item,之所以向现在这样写是为了便于理解和输入流迭代器的逻辑统一
            *int_os=item;
            int_os++;
        }
        cout<<endl;//这一句不能省略,否则看不到输出
    (3)使用copy算法,简化输出vector容器中数据的代码
    std::copy(vec.begin(),vec.end(),int_os);
        cout<<endl;
  • 相关阅读:
    关于putty使用详解
    ORA12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法
    VMware的“Bridge”、“NAT”、“Hostonly”上网方式的区别
    转贴一个很全的sql用法
    网站
    sql exsits问题!!
    petshop4.0 profile
    一些应该知道的
    继承System.Web.UI.Page的页面基类
    应用程序域(Application Domain)
  • 原文地址:https://www.cnblogs.com/maycpou/p/14704567.html
Copyright © 2011-2022 走看看