Boost C++ 库

……世界上最受推崇且设计最专业的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码规范

随机访问遍历概念 - Boost C++ 函数库

随机访问遍历概念

一个类或内置类型X如果以下表达式有效且符合所述语义,则建模为 随机访问遍历 (Random Access Traversal) 概念。在下表中,距离iterator_traits<X>::difference_typeandn表示一个类型为距离.

随机访问遍历迭代器要求(在双向遍历的基础上)
表达式 返回类型 操作语义 断言/前提条件
r += n X&
{
  Distance m = n;
  if (m >= 0)
    while (m--)
      ++r;
  else
    while (m++)
      --r;
  return r;
}
 
a + n, n + a X { X tmp = a; return tmp += n; }  
r -= n X& return r += -n  
a - n X { X tmp = a; return tmp -= n; }  
b - a 距离 a < b ?  distance(a,b) : -distance(b,a) pre: 存在一个值n距离使得a + n == b. b == a + (b - a).
a[n] 可转换为 T *(a + n) 前置条件:a 是一个 可读迭代器 (Readable Iterator)
a[n] = v 可转换为 T *(a + n) = v 前置条件:a 是一个 可写迭代器 (Writable iterator)
a < b 可转换为bool b - a > 0 <是全序关系
a > b 可转换为bool b < a >是全序关系
a >= b 可转换为bool !(a < b)  
a <= b 可转换为bool !(a > b)  
iterator_traversal<X>::type 可转换为random_access_traversal_tag