插入迭代器

1. 测试代码:

 #include<iostream>
#include<vector>
#include<list>
#include<iterator>
#include<algorithm>
using namespace std; void display(list<int> li)
{
for (auto c : li)
cout << c << " ";
cout << endl;
} int main()
{
vector<int> vi = { , , , , , , , , , };
list<int> li1, li2, li3; unique_copy(vi.begin(), vi.end(), inserter(li1, li1.begin()));
display(li1); unique_copy(vi.begin(), vi.end(), back_inserter(li2));
display(li2); unique_copy(vi.begin(), vi.end(), front_inserter(li3));
display(li3);
system("pause");
return ;
}

输出结果:

iostream迭代器

1. 测试代码:

 #include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std; int main()
{
istream_iterator<int> in_iter(cin);
istream_iterator<int> eof;
vector<int> vi;
while (in_iter != eof)
vi.push_back(*in_iter++); sort(vi.begin(), vi.end()); ostream_iterator<int> out_iter(cout, " ");
copy(vi.begin(), vi.end(), out_iter);
return ;
}

输出结果:

2. 测试代码:

 #include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std; int main()
{
istream_iterator<int> in_iter(cin);
istream_iterator<int> eof;
vector<int> vi;
while (in_iter != eof)
vi.push_back(*in_iter++); sort(vi.begin(), vi.end()); ostream_iterator<int> out_iter(cout, " ");
unique_copy(vi.begin(), vi.end(), out_iter);
return ;
}

输出结果:

反向迭代器

1. 测试代码:

 #include<iostream>
#include<vector>
#include<iterator>
using namespace std; int main()
{
vector<int> vec = { , , , , , , , , , };
for (auto r_iter = vec.crbegin(); r_iter != vec.crend(); ++r_iter)
cout << *r_iter << " ";
cout << endl;
return ;
}

输出结果:

2. 测试代码:

 #include <iostream>
#include <deque>
#include <algorithm>
#include <iterator>
using namespace std; void print(int elem)
{
cout << elem << ' ';
} int main()
{
deque<int> coll;
for (int i = ; i <= ; ++i)
coll.push_back(i); deque<int>::iterator pos1;
pos1 = find(coll.begin(), coll.end(), ); deque<int>::iterator pos2;
pos2 = find(coll.begin(), coll.end(), );
for_each(pos1, pos2, print);
cout << endl; deque<int>::reverse_iterator rpos1(pos1);
deque<int>::reverse_iterator rpos2(pos2);
for_each(rpos2, rpos1, print);
cout << endl;
return ;
}

输出结果:

【分析】

代码首先在一个deque中插入1到9,然后查找元素值为2和7的位置,分别赋值给迭代器pos1和pos2,然后输出,由于STL中的操作总是左开右闭的区间,即[2,7),所以输出2 3 4 5 6,7不会输出。

接下来将迭代器转换成逆向迭代器,再次输出,对于反向迭代器,由于是反向,所以按逻辑来说它是左开右闭的(这里我尝试了rpos2为iterator.end(),rpos1为iterator.begin(),此时输出全部),即(7,2](事实上还是左闭右开,只不过此时的左和iterator顺序一样)。所以输出6 5 4 3 2,下面的图片解释的很清楚。

【C++ Primer | 10】再探迭代器的更多相关文章

  1. 【C++ Primer 第10章】再探迭代器

    反向迭代器 • 反向迭代器就是在容器中从尾元素向首元素反向移动的迭代器.对于反向迭代器,递增(以及递减)操作的含义会颠倒过来. • 递增一个反向迭代器(++it)会移动到前一个元素:递减一迭代器(-- ...

  2. C++ Primer :第十章 :泛型算法之再探迭代器以及其他算法

    除了为每个容器定义的迭代器之外,标准库在头文件<iterator>还定义了额外集中迭代器, 包括: 插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素. 流迭代器,    这些迭 ...

  3. 10.4 再探迭代器-插入/IO/反向

    10.4.1 插入迭代器 插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 (1)back_inserter: 接受一个参数, 示例: auto iter = back ...

  4. 【C++ Primer | 10】泛型算法

    #include<iostream> #include<algorithm> #include<vector> #include<string> #in ...

  5. C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】

    STL实践与分析 --再谈迭代器[中] 二.iostream迭代[续] 3.ostream_iterator对象和ostream_iterator对象的使用 能够使用ostream_iterator对 ...

  6. C++ Primer 学习笔记_44_STL实践与分析(18)--再谈迭代器【下】

    STL实践与分析 --再谈迭代器[下] 三.反向迭代器[续:习题] //P355 习题11.19 int main() { vector<int> iVec; for (vector< ...

  7. 【再探backbone 02】集合-Collection

    前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...

  8. 再探jQuery

    再探jQuery 前言:在使用jQuery的时候发现一些知识点记得并不牢固,因此希望通过总结知识点加深对jQuery的应用,也希望和各位博友共同分享. jQuery是一个JavaScript库,它极大 ...

  9. 再探java基础——break和continue的用法

    再探java基础——break和continue的用法 break break可用于循环和switch...case...语句中. 用于switch...case中: 执行完满足case条件的内容内后 ...

随机推荐

  1. flirtlib 测试过程

    一. 安装flirtlib 1. 安装必要的依赖库 Boost >= 1.36 (submodules math and graph) 这个有了 Qt4 (for the gui)这个也有了 Q ...

  2. Python解析Pcap包类源码学习

    0x1.前言 ​ 在现场取证遇到分析流量包的情况会比较少,虽然流量类设备原理是把数据都抓出来进行解析,很大一定程度上已经把人可以做的事情交给了机器自动完成. ​ 可用于PCAP包分析的软件比如科来,W ...

  3. faster-rcnn自己的理解总结(包括它的前世今身R-CNN和fast R-CNN)

    1.grandfather:  R-CNN网络 结构如下: 工作流程: Input(an image)   Proposals(~2K个,在使用CNN提取特征之前还要先resize)  feature ...

  4. python之async-timeout模块

    async-timeout 兼容async的超时的上下文管理器 async-timeout的timeout和asyncio的wiat_for比较 首先从使用上来说asyncio.wait_for(aw ...

  5. vc++基础班[22]---文件的基本操作2

      MFC 中的 CFile 及其派生类中没有提供直接进行文件的复制操作,因而要借助于SDK API: SDK中的文件相关函数常用的有CopyFile().CreateDirectory().Dele ...

  6. struts2项目搭建

    把strutslib中的所有jar包添加到类路径 在src下创建struts.xml文件 <?xml version="1.0" encoding="UTF-8&q ...

  7. AngularJs 刷新页面

    第一种: AngularJs 刷新页面可采用下面的方式:首先先在控制器中注册$window,然后定义函数$scope.reloadRoute,在需要刷新页面的地方调用函数$scope.reloadRo ...

  8. zabbix添加对haproxy的监控

    zabbix添加对haproxy的监控 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy本身提供一个web页面 ...

  9. mybatis:在springboot中的配置

    ## Mybatis 配置 mybatis.type-aliases-package=com.xfind.core.entity.xianyu mybatis.mapper-locations=cla ...

  10. Android直连SQL Server数据库

    1. 下载jtds,一个开放源代码的Java实现的JDBC驱动,地址:http://sourceforge.net/projects/jtds/ 2. 添加jtds到当前Android项目中,本人使用 ...