5种不同的迭代器分别是:
- input_iterator
- output_iterator
- forward_iterator
- bidirectional_iterator
- random_access_iterator
下面是侯捷老师对不同类型容器所使用的迭代器类型进行测试的代码和得到的结果:
测试代码:
#include<iostream>
#include<array>
#include<vector>
#include<list>
#include<forward_list>
#include<deque>
#include<set>
#include<map>
#include<unordered_set>
#include<unordered_map>
#include<iterator>
using namespace std;
void _display_category(random_access_iterator_tag)
{
cout<<"random_access_iterator_tag"<<endl;
}
void _display_category(bidirectional_iterator_tag)
{
cout<<"bidirectional_iterator_tag"<<endl;
}
void _display_category(forward_iterator_tag)
{
cout<<"forward_iterator_tag"<<endl;
}
void _display_category(input_iterator_tag)
{
cout<<"input_iterator_tag"<<endl;
}
void _display_category(output_iterator_tag)
{
cout<<"output_iterator_tag"<<endl;
}
template<typename I>
void display_category(I itr)
{
typename iterator_traits<I>::iterator_category cagy;
_display_category(cagy);
}
int main()
{
display_category(array<int,10>::iterator());
display_category(vector<int>::iterator());
display_category(list<int>::iterator());
display_category(forward_list<int>::iterator());
display_category(deque<int>::iterator());
display_category(set<int>::iterator());
display_category(map<int,int>::iterator());
display_category(multiset<int>::iterator());
display_category(multimap<int,int>::iterator());
display_category(unordered_set<int>::iterator());
display_category(unordered_map<int,int>::iterator());
display_category(unordered_multiset<int>::iterator());
display_category(unordered_multimap<int,int>::iterator());
display_category(istream_iterator<int>());
display_category(ostream_iterator<int>(cout,""));
return 0;
}
测试结果:
另外,根据不同容器的数据结构也可以推测得到其使用的迭代器类型。