可能重复:
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_type
为iterator's difference_type
,可能为否定,但count
只能返回值&gt; = 0.为什么difference_type
而非size_t
为例?
答案 0 :(得分:12)
理论上,您可能有一个巨大的序列,其元素数量只能用128位表示。假设实现支持相应的整数类型,size_t
很可能使用64位类型。但是,这个巨大序列的迭代器可以使用128位整数。注意,序列不必在任何单个计算机的存储器中表示。它可能分散在多个庞大的数据库中。
您可能还有一台相对较小的计算机,仅支持具有合理性能的32位类型。对于完全标准的一致性,它可能必须支持64位类型,但是可能希望使用平台本机支持的表示来支持更快的计算。也就是说,size_t
可能不是最佳选择。在创建迭代器时,您通常知道需要支持的大小。