C++STL迭代器之配接器(iterator adapters)

迭代器是一个纯抽象概念,任何一个东西,只要其行为类似迭代器,它就是一个迭代器。因此,你可以撰写一些类,具备迭代器接口,但行为不一。C++标准库提供了数个预先定义的特殊迭代器即所谓的迭代器适配器,它们不但其辅助作用,还能让整个迭代器抽象概念更加强大。

三种常用的迭代器配接器

1:insert iterators(安插型迭代器)
2:stream iterators(流迭代器) //需要包含头文件iterator
3:reverse iterators(逆向迭代器)

insert iterators(安插型迭代器)

1.back_inserter(container) 在容器尾部安插元素
2.front_inserter(container) 在容器头部安插元素
3.inserter(container,pos) 在容器pos安插元素

#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
int main()
{
	vector<int>coll = {1,2,3,4,5,6};
	list<int>loll;
	//不使用安插型迭代器
	loll.resize(6);    //需要预先给loll分配足够的空间
	copy(coll.begin(),coll.end(),loll.begin());
	copy(loll.begin(),loll.end(),ostream_iterator<int>(cout," "));
   //使用安插型迭代器
    copy(coll.begin(),coll.end(),back_inserter(loll));
	copy(loll.begin(),loll.end(),ostream_iterator<int>(cout," ")); 
}

stream iterators(流迭代器) //需要包含头文件iterator

1.istream_iterator
2.ostream_iterator

#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
int main()
{
	vector<int>coll;
	copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(coll));
	copy(coll.begin(), coll.end(), ostream_iterator<int>(cout," "));
}

reverse iterators(逆向迭代器)

作用:逆向的运行所有操作,它将递增运算变为递减。所有容器都可以通过成员函数rbegin(),rend()产生逆向迭代器.

int main()
{
	vector<int>coll = {1,2,3,4,5,6};	
	//123456
	copy(coll.begin(), coll.end(), ostream_iterator<int>(cout," "));
	cout << endl;
	//654321
	copy(coll.rbegin(), coll.rend(), ostream_iterator<int>(cout, " "));
//其他类似排序算法也可以,例如sort()默认升序排序,如果我们想降序,可以传入逆向迭代器
    sort(coll.begin(), coll.end());
	copy(coll.begin(), coll.end(), ostream_iterator<int>(cout," "));
	cout << endl;
	sort(coll.rbegin(), coll.rend());
	copy(coll.begin(), coll.end(), ostream_iterator<int>(cout, " "));

}
原创文章 23 获赞 1 访问量 368

猜你喜欢

转载自blog.csdn.net/weixin_44806268/article/details/105554277