类别:算法,迭代器 | 组件类型:函数 |
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);
的第二个版本距离是在原始 STL 中定义的,而第一个版本是在 C++ 标准草案中定义的;定义被更改是因为旧的接口笨拙且容易出错。旧的接口需要使用临时变量,并且它的语义有点不直观:它递增n从第一个到最后的距离,而不是将该距离存储在n. [2]
中。这两个接口目前都受支持 [3],出于向后兼容性的原因,但最终旧的版本将被删除。
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.