如果喜欢使用STL,但是对istream_iterator读取字符流的性能不很满意,那么istreambuf_iterator正是需要的工具。
使用iterator的3个理由:
1、有些版本的erase函数和insert函数要求使用iterator,而const和reverse的iterator不能满足这些要求。
2、想要将const_iterator隐式转换为iterator是不可能的。
3、从reverse_iterator转换而来的iterator在使用之前需要做相应的调整。
#include<iostream>
#include<deque>
#include<iterator>
using namespace std;
int main()
{
typedef deque<int> IntDeque;
typedef IntDeque::iterator Iter;
typedef IntDeque::const_iterator ConstIter;
Iter i;
ConstIter ci;
if (i == ci);//使得ci和c指向同一个容器,比较iterator和const_iterator
//因为iterator在比较之前应该被隐式转换成了const_iterator,真正的比较应该是在两个iterator之间
//因为有些STL实现将const_iterator的等于操作(operator=)作为一个成员函数而不是非成员函数
//解决问题的方法是,只要交换两个iterator的位置即可
if (ci == i);
//下边是另一个例子
if (i - ci > 3);//如果i与ci之间至少有三个元素,该代码也可能被拒绝
//改为下边的代码即可
if (static_cast<ConstIter>(i)-ci >= 3);
return 0;
}