9.2.1 迭代器
迭代器有公共接口:如果一个迭代器提供某个操作,那么所有提供该操作的迭代器对这个操作的实现方法都是相同的。
-- | 标准容器迭代器运算符 |
---|---|
*iter | 返回迭代器所指元素的引用 |
iter->mem | 解引用iter并获取该元素名为mem的成员,等价于(*iter).mem |
++ / --iter | 令iter指示容器中的下/上一个元素 |
iter1 == iter2 / iter1 !=iter2 | 判断两个迭代器是否相等 |
-
迭代器范围 一个迭代器范围由一对迭代器表示,两个迭代器分别指向同一个容器中的元素或是尾元素之后的位置。这两个迭代器通常被称为begin和end。它们标记了容器中元素的一个范围。这种元素范围被称为左闭合区间,标准数学描述为 [ begin , end )。
-
使用左闭合范围蕴含的编程假定 标准库使用左闭合范围有三种方便的性质:
- 如果begin和end相等,则范围为空。
- 如果begin和end不等,则范围至少包含一个元素,且begin指向该范围的第一个元素。
- 我们可以对begin递增若干次,使begin==end。
while (begin != end)
{
*begin = val;
++begin;
}
9.2.2 容器类型成员
每个容器都定义了多个类型,大多数容器提供反向迭代器。反向迭代器就是一种反向遍历容器的迭代器,与正向迭代器相比,各种操作的含义也发生了颠倒。通过类型别名,可以在不了解容器的情况下使用它。
list<string>::iterator iter;
vector<int>::difference_type count;