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;
posted @ 2021-04-26 14:41  maycpou  阅读(267)  评论(0编辑  收藏  举报