1.分类
迭代器有有5种:
- input
- output
- forward(前向)
- Bidirectional(双向)
- Random access
2.迭代器相关辅助函数
- void advance(InputIterator& pos, Dist n)
- Dist distance(InputIterator& pos1, InputIterator& pos2)
- void iter_swap(ForwardIterator1 pos1, ForwardIterator2 pos2)
3.迭代器配接器(Iterator Adapters)
- reverse(逆向)迭代器
vector<int>::iterator pos;
...
vector<int>::reverse_iterator rpos(pos);//注:*rpos != *pos
注:将一个迭代器转化为逆向迭代器的过程中,保持的是实际位置(元素)而非逻辑位置(数值)。(*rpos).base()可以将rpos转为正常迭代器。注:rbegin()==end()
注:
- Insert(安插型)迭代器
- stream(流)迭代器
#include <iterator>
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream ofile("ostream.txt");
ostream_iterator<string> intWriter(ofile,"\n");
intWriter="999";
intWriter="77";
intWriter="-5";
ofile.close();
vector<int> coll;
for(int i=1;i<=9;++i){
coll.push_back(i);
}
copy(coll.begin(),coll.end(),
ostream_iterator<int>(cout));
cout<<endl;
copy(coll.begin(),coll.end(),
ostream_iterator<int>(cout," < "));
cout<<endl;
return 0;
}


#include <iterator>
#include <iostream>
using namespace std;
int main()
{
istream_iterator<int> intReader(cin);
istream_iterator<int> intReaderEOF;
while (intReader!=intReaderEOF)
{
cout<<"once: "<<*intReader<<endl;
cout<<"once again: "<<*intReader<<endl;
++intReader;
}
return 0;
}

注:
Q:当pos为一个iterator时,*pos是否就是pos?
A:貌似是的。例如:"****pos=45;"还是可以执行。
Q:对于outIterator,pos++,++pos是否有作用?
A:什么都没有做。
4.使用自定义的迭代器
自己写迭代器有2种办法可行:
1.提供必要的五种型别定义,就像iterator_traits结构所描述(P284)。
2.提供一个特化的iterator_traits结构。