zoukankan      html  css  js  c++  java
  • 流迭代器 + 算法灵活控制IO流

    前言

      标准算法配合迭代器使用太美妙了,使我们对容器(数据)的处理更加得心应手。那么,能不能对IO流也使用标准算法呢?有人认为不能,他们说因为IO流不是容器,没有迭代器,故无法使用标准算法。他们错了,错在IO流确实不是容器,但它能绑定一种特殊的迭代器,叫做流迭代器。一些算法能以流迭代器为参数,对IO流进行控制

    一个经典的编程问题

      从标准输入读取一些数,再将读取的不重复的数写到标准输出。

    使用流迭代器巧妙解决掉上述问题

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 // 使用非标准的迭代器都要包含这个头文件
     5 #include <iterator>
     6 
     7 using namespace std;
     8 
     9 int main()
    10 {
    11     /*
    12      * 定义输入流迭代器
    13      * 只有键入ctrl+d结束输入后,后两句方可执行。
    14     */
    15     istream_iterator<int> cin_it(cin);
    16     // 定义输入流迭代器时如果没有给参数,那么默认迭代器指向刚超出末端的位置。
    17     istream_iterator<int> eof;
    18 
    19     // 输入流迭代器作为参数给vector容器赋值
    20     vector<int> vec(cin_it, eof);
    21 
    22     // 对vec容器元素进行排序
    23     sort(vec.begin(), vec.end());
    24 
    25     // 创建输出流迭代器
    26     ostream_iterator<int> output(cout, " | ");
    27 
    28     cout << endl;
    29     // 将vec容器内容复制到输出流
    30     unique_copy(vec.begin(), vec.end(), output);
    31 
    32     cout << endl;
    33     
    34     return 0;
    35 }

      运行结果:

      

  • 相关阅读:
    C#学习笔记:多态与隐藏,覆盖
    HTML与XML数据的结合小总结
    基于角色(RoleBased)的表单验证
    去除C++String的首尾空格
    Bash Shell中命令行选项/参数处理
    linux shell 执行多个命令的几种方法
    gdb 多线程调试
    linux 时间戳及时间差计算
    oracle sql日期比较
    在Fedora 14上安装Sun JDK 6
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3226706.html
Copyright © 2011-2022 走看看