• 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
  • 相关阅读:
    Run Mac OS X on a PC
    asp:RadioButton javascript onclick event
    The SMTP server requires a secure connection or the client was not authenticated
    Mac OS could not mount diskXX with name after erase
    server does not support secure connections
    PETS 5 五级简介
    VB中的转义字符(回车、换行、Tab等)
    MAC (Mountain Lion)+Eclipse+python+Djgano+PyDve+MySQL 开发环境搭建
    Spring bean 实现生命周期的三种解决方案
    [APUE]第九章 进程关系
  • 原文地址:https://www.cnblogs.com/runnyu/p/4829564.html
Copyright © 2020-2023  润新知