9.2.1 迭代器

迭代器有公共接口:如果一个迭代器提供某个操作,那么所有提供该操作的迭代器对这个操作的实现方法都是相同的。

-- 标准容器迭代器运算符
*iter 返回迭代器所指元素的引用
iter->mem 解引用iter并获取该元素名为mem的成员,等价于(*iter).mem
++ / --iter 令iter指示容器中的下/上一个元素
iter1 == iter2 / iter1 !=iter2 判断两个迭代器是否相等
  • 迭代器范围 一个迭代器范围由一对迭代器表示,两个迭代器分别指向同一个容器中的元素或是尾元素之后的位置。这两个迭代器通常被称为begin和end。它们标记了容器中元素的一个范围。这种元素范围被称为左闭合区间,标准数学描述为 [ begin , end )。

  • 使用左闭合范围蕴含的编程假定 标准库使用左闭合范围有三种方便的性质:

  1. 如果begin和end相等,则范围为空。
  2. 如果begin和end不等,则范围至少包含一个元素,且begin指向该范围的第一个元素。
  3. 我们可以对begin递增若干次,使begin==end。
while (begin != end)
{
  *begin = val;
  ++begin;
}

9.2.2 容器类型成员

每个容器都定义了多个类型,大多数容器提供反向迭代器。反向迭代器就是一种反向遍历容器的迭代器,与正向迭代器相比,各种操作的含义也发生了颠倒。通过类型别名,可以在不了解容器的情况下使用它。

list<string>::iterator iter;
vector<int>::difference_type count;