SGI

距离

类别:算法,迭代器 组件类型:函数

原型

距离是一个重载的名称;实际上有两个距离函数。
template <class InputIterator>
inline iterator_traits<InputIterator>::difference_type
distance(InputIterator first, InputIterator last);

template <class InputIterator, class Distance>
void distance(InputIterator first, InputIterator last, Distance& n);

描述

查找之间的距离第一个最后 的次数第一个必须递增,直到它等于最后[1] 的第一个版本距离,它接受两个参数,只返回那个距离;第二个版本,它接受三个参数,并且返回类型为void,递增n那个距离。

的第二个版本距离是在原始 STL 中定义的,而第一个版本是在 C++ 标准草案中定义的;定义被更改是因为旧的接口笨拙且容易出错。旧的接口需要使用临时变量,并且它的语义有点不直观:它递增n第一个最后的距离,而不是将该距离存储在n. [2]

中。这两个接口目前都受支持 [3],出于向后兼容性的原因,但最终旧的版本将被删除。

定义

在标准头文件中定义 迭代器,以及在非标准向后兼容头文件中定义 iterator.h

类型要求

对于第一个版本对于第二个版本

前提条件

复杂度

常数时间,如果输入迭代器随机访问迭代器 的模型,否则是线性时间。

示例

int main() {
  list<int> L;
  L.push_back(0);
  L.push_back(1);

  assert(distance(L.begin(), L.end()) == L.size());
}

备注

[1] 这就是为什么距离没有为 输出迭代器 定义的原因:不可能比较两个 输出迭代器 以判断它们是否相等。

[2] 忘记初始化n为 0 是一个常见的错误。

[3] 新的距离接口使用iterator_traits类,它依赖于称为部分特化的 C++ 功能。今天许多编译器都没有实现完整的标准;特别是,许多编译器不支持部分特化。如果您的编译器不支持部分特化,那么您将无法使用较新的版本距离,或任何其他涉及iterator_traits.

的 STL 组件。

另请参阅, distance_typeadvanceiterator_traits输入迭代器随机访问迭代器迭代器标签
[Silicon Surf] [STL Home]
迭代器概述 版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。