Reverse(逆向)迭代器

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

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

 #include <iostream>
#include <list>
#include <algorithm>
using namespace std; void print(int elem)
{
cout<<elem<<' ';
} int main()
{
list<int> coll;
for(int i=;i<=;++i)
coll.push_back(i);
for_each(coll.begin(),coll.end(),print);
cout<<endl;
for_each(coll.rbegin(),coll.rend(),print);
cout<<endl;
}

Insert(安插型)迭代器

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

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

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

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

下面展示了back inserters的用法

 #include <iostream>
#include <vector>
#include <algorithm>
#include "print.cpp"
using namespace std; int main()
{
vector<int> coll;
back_insert_iterator<vector<int> > iter(coll);
*iter=;
iter++;
*iter=;
iter++;
*iter=;
PRINT_ELEMENTS(coll);
back_inserter(coll)=;
back_inserter(coll)=;
PRINT_ELEMENTS(coll);
coll.reserve(*coll.size());
copy(coll.begin(),coll.end(),back_inserter(coll));
PRINT_ELEMENTS(coll);
}

Stream(流)迭代器

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

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

1.Ostream迭代器

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

下面演示ostream迭代器的用法

 #include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std; int main()
{
ostream_iterator<int> intWriter(cout,"\n");
*intWriter=;
intWriter++;
*intWriter=;
intWriter++;
*intWriter=-;
vector<int> coll;
for(int i=;i<=;++i)
coll.push_back(i);
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout));
cout<<endl;
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," < "));
cout<<endl;
}

2.istream迭代器

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

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

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

 #include <iostream>
#include <iterator>
using namespace std; int main()
{
istream_iterator<int> intReader(cin);
istream_iterator<int> intReaderEOF;
while(intReader!=intReaderEOF)
{
cout<<"once: "<<*intReader<<endl;
cout<<"once again: "<<*intReader<<endl;
++intReader;
}
}

STL学习笔记(迭代器配接器)的更多相关文章

  1. STL学习笔记:空间配置器allocator

    allocator必要接口: allocator::value_type allocator::pointer allocator::const_pointer allocator::referenc ...

  2. 《Head first设计模式》学习笔记 – 迭代器模式

    <Head first设计模式>学习笔记 – 迭代器模式 代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 爆炸性新闻:对象村餐厅和对象村煎饼屋合并了!真是个 ...

  3. Effective STL 学习笔记 32 ~ 33

    Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  4. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  5. Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor

    Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...

  6. 【STL学习笔记】一、STL体系

    目录 1.标准库以header files形式呈现 2.namespce命名空间 3.STL与OO 4.STL六组件及其关系 5.STL组件例子 6.range-based for statement ...

  7. ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理

    ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理 计划时间:第二天下午 背景:数据量大,工程大 目的:自动化,批处理,定制业务流程,不写程序 教程:Pdf/343 数据:chap8/ex5 ...

  8. Effective STL 学习笔记 39 ~ 41

    Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  9. Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value

    Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...

  10. Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据

    Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...

随机推荐

  1. 【IDEA】IDEA集成Tomcat7插件运行项目

    Maven已经是Java的项目管理标配,如何在JavaEE开发使用Maven调用Web应用,是很多同学关心的问题.本文将介绍,Maven如何介绍Tomcat插件. Maven Tomcat插件现在主要 ...

  2. VC++中有关句柄和指针及其转换(转)

    原文转自 https://blog.csdn.net/jearmy/article/details/47030011 1.MFC窗口的句柄和指针的转换 (1) 一般窗口对象都会有一个其对应的句柄变量, ...

  3. 使用log4j2分离系统日志与业务日志

    前一篇文章介绍了log4j2 扩展日志级别,支持将系统日志与业务处理日志拆分,现在介绍一下通过日志级别将系统日志与业务日志分类,要达到这个目的很容易,只需要配置一下log4j的xml文件: <? ...

  4. Servlet 2.4 规范之第七篇:过滤器

    过滤器是一套java组件,用于在请求—>资源—>应答的这一过程中即时转换处理负载和头信息. 本章讲述了Servlet 2.4 API中一些类和方法,这些类和方法提供了一套轻量级框架用于过滤 ...

  5. android 调用系统相机崩溃的解决方案

    解决方案: 1.(推荐)7.0之后你的app就算有权限,给出一个URI之后手机也认为你没有权限. 不用修改原有代码,在Application的oncreate方法中: if (Build.VERSIO ...

  6. 利用NPOI组件产Excel完整操作

    最终还是要使用NPOi了.刚开始做的是用com组件,发现如果本机不按照excel就不能使用,后来把其中一支改为了用Itextsharp产生pdf,但是还有几支批次要产生Excel,只能改用NPOI了. ...

  7. (11)oracle触发器

    触发器是特殊的存储过程. 每当一个特定的数据操作语句(inster,update,delete)在指定的表上触发时,Oracle自动的地执行触发器中定义的语句序列. create trigger 触发 ...

  8. 51nod 1873 初中的算术【Java BigDecimal/高精度小数】

    1873 初中的算术 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 Noder现在上初三了,正在开始复习中考.他每天要计算型如 (a× a× a× ...

  9. HDU 1426 Sudoku Killer (回溯 + 剪枝)

    本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398818 题意: 给你一个 9*9 的矩阵,同一行相邻的两个元素用一个空格分开.其中1-9代表该位 ...

  10. spark-join算子