如下图,end()和rbegin()两个迭代器内部的指针起始是一样的,区别在于方向不同,导致取的值不同;
因此通过调用reverse_iterator的构造函数,将正向迭代器保存到cunrrent中,当真正调用*,++等等成员函数时,对保存的current加以改造
使用方式:
vector<int> v;
...
v.rbegin();
- inserter iterator:
有三种插入迭代器:inserter(c, it);back_inserter©,front_inserter©;
它们都是用数据成员保存了底层容器c(inserter还多保存一个插入位置it),并重载了operator=,当对这三种迭代器进行赋值动作时,会对底层容器分别调用insert,push_back,push_front。而对其它++,*等操作,只是直接返回back_insert_iterator本身,并不做其他事情;
下图中在copy算法中对第三参数resuly做的事情:*, =, ++操作
operator*不做任何事情,直接返回本身
operator=会对底层容器调用insert操作
operator++不做任何事情,直接返回本身
- stream_iterator:istream_iterator和ostream_iteraor
ostream_iterator<int> out_it(cout, ",");
如下图,operator*,operator++同样不做任何事情,只有operator=内分别对保存的数据成员调用<<
istream_iterator<double> eos;
istream_iterator<double> iit(cin);