15

可能重复:
为什么 C++ 标准算法“count”返回 ptrdiff_t 而不是 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 的数量:*i == value, pred(*i) != false。

difference_typeis iterator's difference_type,它可以是负数,但count只能返回值 >= 0。为什么difference_type而不是size_t例如?

4

1 回答 1

12

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

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

于 2012-09-24T21:51:47.353 回答