为什么std :: count(_if)返回iterator :: difference_type而不是size_t?

时间:2012-09-24 21:44:07

标签: c++ c++11 stl-algorithm library-design

  

可能重复:
  Why does the C++ standard algorithm “count” return a ptrdiff_t instead of size_t?

标准C ++中有算法std::count / std::count_if

template<class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count(InputIterator first, InputIterator last, const T& value);

template<class InputIterator, class Predicate>
typename iterator_traits<InputIterator>::difference_type
count_if(InputIterator first, InputIterator last, Predicate pred);
  

效果:返回以下对应的[first,last]范围内的迭代器数量   条件成立:* i == value,pred(* i)!= false。

difference_typeiterator's difference_type,可能为否定,但count只能返回值&gt; = 0.为什么difference_type而非size_t为例?

1 个答案:

答案 0 :(得分:12)

理论上,您可能有一个巨大的序列,其元素数量只能用128位表示。假设实现支持相应的整数类型,size_t很可能使用64位类型。但是,这个巨大序列的迭代器可以使用128位整数。注意,序列不必在任何单个计算机的存储器中表示。它可能分散在多个庞大的数据库中。

您可能还有一台相对较小的计算机,仅支持具有合理性能的32位类型。对于完全标准的一致性,它可能必须支持64位类型,但是可能希望使用平台本机支持的表示来支持更快的计算。也就是说,size_t可能不是最佳选择。在创建迭代器时,您通常知道需要支持的大小。