迭代器相关

  • 迭代器类别:输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机存取迭代器。
    迭代器适配器:插入迭代器,流迭代器, 反向迭代器,移动迭代器。

  • 插入迭代器:接受一个容器,生成一个迭代器,在指定位置插入元素,类型有3种,back_inserter, front_inserter,
    inserter。插入迭代器中赋值使用iter=value的形式,*it,++it, it++这些操作虽然存在,但是不存在任何作用,每个操作都返回it,但是为了可读性高,最好还是使用这样的形式。插入迭代器最后都会调用相应的函数,比如push_back(),因此,只有拥有相应函数的容器才能使用。
  • 流迭代器:流迭代器有两种,分别是istream_iterator和ostream_iterator。istream_iterator拥有两个构造函数,一个指定输入流,另一个无参数,作为尾后迭代器使用,使用istream_iterator的类必须重载了>>操作符。it++和++it都是有效果的,从输入流中读取下一个值。ostream_iterator也拥有两个构造函数,都必须指定一个输出流,和一个可选的分隔符,如\n,使用it=value的形式写入到输出流,*it, ++it, it++等虽然存在,但是并无任何效果。一个打印容器内元素的方法,如
    ostream_iterator<int> out_iter(cout, "\n"); copy(coll.begin(), coll.end(), out_iter);

  • 反向迭代器,要点,反向迭代器的目的是表示元素范围,而这些范围是不对称的,这导致一个重要的结果:当我们从一个普通迭代器初始化反向迭代器,或是从反向迭代器转化为原始迭代器,结果是二者不指向同一个元素。优点是表示范围时始终表示的是同一个范围。通过base()函数把反向迭代器转换成对应的普通迭代器。

  • 移动迭代器