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
原文地址:https://www.cnblogs.com/runnyu/p/4829564.html