STL学习笔记(迭代器配接器)
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学习笔记(迭代器配接器)的更多相关文章
- STL学习笔记:空间配置器allocator
allocator必要接口: allocator::value_type allocator::pointer allocator::const_pointer allocator::referenc ...
- 《Head first设计模式》学习笔记 – 迭代器模式
<Head first设计模式>学习笔记 – 迭代器模式 代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 爆炸性新闻:对象村餐厅和对象村煎饼屋合并了!真是个 ...
- Effective STL 学习笔记 32 ~ 33
Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 31:排序算法
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- 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 ...
- 【STL学习笔记】一、STL体系
目录 1.标准库以header files形式呈现 2.namespce命名空间 3.STL与OO 4.STL六组件及其关系 5.STL组件例子 6.range-based for statement ...
- ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理
ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理 计划时间:第二天下午 背景:数据量大,工程大 目的:自动化,批处理,定制业务流程,不写程序 教程:Pdf/343 数据:chap8/ex5 ...
- Effective STL 学习笔记 39 ~ 41
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- 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 ...
- Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...
随机推荐
- 培训补坑(day4:网络流建模与二分图匹配)
补坑时间到QAQ 好吧今天讲的是网络流建模与二分图匹配... day3的网络流建模好像说的差不多了.(囧) 那就接着补点吧.. 既然昨天讲了建图思想,那今天就讲讲网络流最重要的技巧:拆点. 拆点,顾名 ...
- VS2013 Sqlite3 操作指令
extern "C"{ #include "sqlite3.h" }; #pragma comment(lib,"sqlite.lib") ...
- python 实现经典算法
import time start_time = time.clock() list_ = [9, 2, 7, 4, 5, 6, 3, 8, 1] """ # 堆排序(通 ...
- 删除 Myeclipse 遗留的 workspace
有时因需要而创建多个 workspace 并在它们之间切换,但是如果某些 workspace 内容被物理删除(不再需要)后,当你点击 File --> Switch Workspace 时,旧的 ...
- 正则表达式之Regex.Replace()用法
正则表达式替换匹配到的字符串 string txt = "AAA12345678AAAA"; //匹配到的连续数字的前4位用*替换 string m =Regex.Replace( ...
- 关于ScrollView嵌套RecyclerView出现item显示不全的问题
最近使用ScrollView时,发现里面嵌套Listview显示不全,试过重写Listview的onMeasure(),并没有起作用.然后将ListView换成RecyclerView后,高度还是显示 ...
- (12)oracle事务
事物 http://www.cnblogs.com/linjiqin/archive/2012/02/06/2340637.htm 在当前的事务中设置保存点 savepoint 名字; 保存点回滚 ...
- ==与equals()区别
equals和==的区别? 经常被简单的理解为equals方法用来比较两个对象是否相同, 而==比较运算符用来比较两个基本数据类型的数值是否相同. 这样的理解无可厚非,但还要透过简单看看本质,才会更清 ...
- mysql里的知识
1.mysql基础 (1)mysql存储结构:数据库->表-> 数据 sql语句 (2)管理数据库: 增加: create database 数据库 default character ...
- Linux下进行Web服务器压力(并发)测试工具http_load、webbench、ab、Siege、autobench简单使用教程(转)
一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...