迭代器之适配器

在这里插入图片描述

任何东西,只要其行为类似迭代器,它就是一个迭代器,标准库提供了数个预定义的特殊迭代器,也叫做迭代器适配器。使用前需要加上 #include<iterator>
1,Insert iterator安插型迭代器
2,Stream iterator串流迭代器
3,Reverse itreator逆向迭代器
4,Move iterator搬移迭代器

1,Insert iterator安插型迭代器

安插型迭代器可以将算法以安插的方式运行而不是覆写。,它会将容器的大小,按需修改,共分为三类:
1,Back_inserter(安插在容器最末端)
2,Front_inserter(安插在容器最前端)
3,Inserter

1,Back_inserter(安插在容器最末端)

Back_inserter支持所有的序列式容器(所有序列式容器支持push_back())

list<int> m_list = {1,2,3,4,5,6,7,8,9,10,0};
	vector<int> m_vector;
	copy(m_list.cbegin(), m_list.cend(),back_inserter(m_vector));
2,Front_inserter(安插在容器最前端)

Front_inserter只支持双向序列式容器,也就是有push_front()的如deque,list等。

	list<int> m_list = {1,2,3,4,5,6,7,8,9,10,0};
	list<int> m_list2;
copy(m_list.cbegin(), m_list.cend(), front_inserter(m_list2));
3,Inserter

Inserter支持所有的容器,包含序列容器,关联容器以及无序容器。它内部调用insert(),序列容器默认为后插,而关联容器为保证顺序,安插的次序与排序的次序是不同的。

	list<int> m_list = {1,2,3,4,5,6,7,8,9,10,0};
	set<int> m_set = {};
	unordered_set<int> m_unordered_set;
    copy(m_list.cbegin(), m_list.cend(),inserter(m_set, m_set.begin()));//out:0 1 2 3 4 5 6 7 8 9 10

2,Stream iterator串流迭代器

串流迭代器被用来读写steam,使得来自键盘的输入像是一个集合,可以从中读取内容也可以把一个算法的输出结果重定向到文件或者屏幕。

	vector<int> m_vector;
	copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(m_vector));
	sort(m_vector.begin(),m_vector.end());
	unique_copy(m_vector.cbegin(),m_vector.cend(),ostream_iterator<int>(cout,"-"));

istream_iterator可从cin读取该类型的元素,istream_iterator()的默认构造函数产生一个代表串流结束符的迭代器。
ostream_iterator将该类型的元素通过cout输出第二个参数为分隔符。

3,Reverse itreator逆向迭代器

Reverse itreator会造成算法的逆向操作,所有双向的或者支持随机访问的容器均支持。通过成员函数 rbegin(),rend(),crbegin(),crend()产生逆向迭代器

    vector<int> m_vector = {1,2,3,4,5,6};
	copy(m_vector.crbegin(),m_vector.crend(),ostream_iterator<int>(cout," "));

4,Move iterator搬移迭代器

Move iterator将所有对于底层元素的处理转换为一个move操作。

	vector<int> m_vector = {1,2,3,4,5,6};
	vector<int> m_vector2(make_move_iterator(m_vector.begin()), make_move_iterator(m_vector.end()));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工农村贴膜小哥

我倒是要看看是那个憨憨在给我打

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值