迭代器是一个纯抽象概念,任何一个东西,只要其行为类似迭代器,它就是一个迭代器。因此,你可以撰写一些类,具备迭代器接口,但行为不一。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, " "));
}