zoukankan      html  css  js  c++  java
  • 第十一章:泛型算法

    1:算法

    find,count:读算法,头文件algorithm;

    copy, replace,replace_copy:写算法,头文件algorithm;

    find_first_of,accumulate:读算法,头文件numeric;

    fill,fill_n:写算法,头文件xutility;

    back_inserter:写算法,头文件iterator;

    2:算法不改变容器的大小,真理在于让算法独立于容器,而达到普遍性,泛性,使得设计更为简单

    3: 理解下面程序代码:

    istream_iterator<int> in_iter(cin); // read ints from cin
      istream_iterator<int> eof; // istream "end" iterator
         // read until end of file, storing what was read in vec
      while (in_iter != eof)
                 // increment advances the stream to the next value
                 // dereference reads next value from the istream
            vec.push_back(*in_iter++);

    对于istream_iterator<int> in_iter(cin); 表示构建了一个流输入迭代器,且通过cin将该迭代器已经准备好了,只要解引用则就可以将输入数据获取到返回来。比如此时用*in_iter时会将流中第一个元素输入其中;但是留意的是*in_iter是获取流中数据返回其值;若在解引用时发现流中没有数据,自然会告诉流,让流提示客户输入数据。

    对于*in_iter++操作,其实质是*in_iter ;in_iter++;而在定义流迭代器时,就已经准备好一个数据待接收了;故而在*in_iter提示接收数据,而在in_iter++还会提示接收数据,因为迭代器指向此流时没有数据。验证:int c=*in_iter;in_iter++;c=*in_iter;第一个会提示输入,是因为in_iter迭代器指向的流没有数据需要输入;而第二将迭代器转下一个时,发现没有任何数据对应,故而提示客户输入数据;而在第3个语句时,由于只是解引用,而此处的迭代器所指流是有数据的,故而不需要提示输入了。

    其整个过程实质是指:定义迭代器时,已经有输入了,只是由于是定义,且没有使用其中数据,故而没有提示;因此第一个解引用就会提示输入;后面的只要迭代器指向下个,则就该填入所指处的值,故而需要提示输入。

    对于*in_iter++操作过程还得考虑优先级问题,是先运行in_iter++;后运行*in_iter;因此,假设输入1 2 ;则先将1收入,且移动后将2也收入了,而*in_iter是将第一个迭代器解引用了,故而可以获取其中的值;但是到下一次循环时,in_iter++则由于没有数据了,故而需要提示输入,则只有输入了,才会*in_iter获得2值;故而输入是1 2 ctl+z 输出才会是1 2;

    1 2

    1--获取1

    ctl+z

    2--获取2

    明显语句:

    istream_iterator<int> itin(cin);
    istream_iterator<int> itin1(cin);
    istream_iterator<int> eof;   
     while(itin!=eof)
    {
    ivec.push_back(*itin);
    itin++;
    }

    可以看到输入是1 2 3 时,只是获得了1 3 ,因为2 已经被itin1获取了。

    4:对于list对象,应该优先使用list容器特有的成员版本,而不是泛型算法。

  • 相关阅读:
    Eclipse快捷键大全
    OOA/OOD/OOP
    SQL Server 存储过程(转)
    PowerDesigner 生成数据库方法(转)
    CDM和PDM的区别?(转)
    委托存在的理由
    提问回顾
    对软件工程常见概念的一些见解
    Gulp插件笔记
    Pascal-S代码注释
  • 原文地址:https://www.cnblogs.com/miner007/p/4063107.html
Copyright © 2011-2022 走看看