zoukankan      html  css  js  c++  java
  • STL学习笔记(迭代器配接器)

    Reverse(逆向)迭代器

    Reverse迭代器是一种配接器。 重新定义递增运算和递减运算。使其行为正好倒置。

    如果你使用这类迭代器,算法将以逆向次序处理元素。所有标准容器都允许使用Reverse迭代器来遍历元素。下面是个例子:

     1 #include <iostream>
     2 #include <list>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 void print(int elem)
     7 {
     8     cout<<elem<<' ';
     9 }
    10 
    11 int main()
    12 {
    13     list<int> coll;
    14     for(int i=1;i<=9;++i)
    15         coll.push_back(i);
    16     for_each(coll.begin(),coll.end(),print);
    17     cout<<endl;
    18     for_each(coll.rbegin(),coll.rend(),print);
    19     cout<<endl;
    20 }
    View Code

    Insert(安插型)迭代器

    通过这种迭代器,算法可以执行安插行为而非覆盖行为。它提供以下操作

    C++标准程序库提供三种Insert迭代器:back Inserters、front inserters、general Inserters。它们之间的区别在于插入位置。

    事实上它们各自调用所属容器中不同的成员函数。

    显然,容器本身必须支持Insert迭代器所调用的函数,否则该种Insert迭代器就不可用。

    下面展示了back inserters的用法

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include "print.cpp"
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     vector<int> coll;
    10     back_insert_iterator<vector<int> > iter(coll);
    11     *iter=1;
    12     iter++;
    13     *iter=2;
    14     iter++;
    15     *iter=3;
    16     PRINT_ELEMENTS(coll);
    17     back_inserter(coll)=44;
    18     back_inserter(coll)=55;
    19     PRINT_ELEMENTS(coll);
    20     coll.reserve(2*coll.size());
    21     copy(coll.begin(),coll.end(),back_inserter(coll));
    22     PRINT_ELEMENTS(coll);
    23 }
    View Code

    Stream(流)迭代器

    我们可以通过Stream迭代器把stream当成算法的原点和起点。

    一个istream迭代器可用来从input stream中读取元素,而一个ostream迭代器可以用来对output stream写入元素。

    1.Ostream迭代器

    ostream迭代器可以将被赋予的值写入output stream中。如此一来算法就可以使用一般的迭代器接口直接对stream执行涂写动作。下面列出ostream迭代器的各个操作函数。

    下面演示ostream迭代器的用法

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <iterator>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     ostream_iterator<int> intWriter(cout,"
    ");
    10     *intWriter=42;
    11     intWriter++;
    12     *intWriter=77;
    13     intWriter++;
    14     *intWriter=-5;
    15     vector<int> coll;
    16     for(int i=1;i<=9;++i)
    17         coll.push_back(i);
    18     copy(coll.begin(),coll.end(),ostream_iterator<int>(cout));
    19     cout<<endl;
    20     copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," < "));
    21     cout<<endl;
    22 }
    View Code

    2.istream迭代器

    istream迭代器用来从input stream读取元素。透过istream迭代器,算法可以从stream中直接读取数据。

    下面是istream迭代器的各项操作函数

    下面展示istream迭代器的各项操作

     1 #include <iostream>
     2 #include <iterator>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     istream_iterator<int> intReader(cin);
     8     istream_iterator<int> intReaderEOF;
     9     while(intReader!=intReaderEOF)
    10     {
    11         cout<<"once: "<<*intReader<<endl;
    12         cout<<"once again: "<<*intReader<<endl;
    13         ++intReader;
    14     }
    15 }
    View Code
  • 相关阅读:
    一次与客户端合作的走坑之旅!
    ecplise打不开提示Eclipse中...No java virtual machine was found...
    eclipse配置tomcat,让java web项目运行起来!
    Tomcat v9.0 Could not publish to the server. java.lang.IndexOutOfBoundsException
    Certbot让网站拥有免费https证书
    Nginx访问权限配置
    hexo博客pure主题解决不蒜子计数不显示的问题
    Mono.Cecil 修改目标.NET的IL代码保存时报异常的处理。
    [转载]斐讯K2 A2版免TTL刷BREED不死Bootloader
    各种UserAgent的列表
  • 原文地址:https://www.cnblogs.com/runnyu/p/4829564.html
Copyright © 2011-2022 走看看