可能重复:
Why does the C++ standard algorithm “count” return a ptrdiff_t instead of size_t?为什么std :: count(_if)返回iterator :: difference_type而不是size_t?
有算法std::count
/std::count_if
在标准C++。
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);
效果:返回在范围[第一,最后一个)的量,以下对应 条件成立我迭代的数目:* I ==值,预解码值(* 1)=假!。
difference_type
是iterator's difference_type
,其可以是负值,但count
只能返回值> = 0为什么difference_type
并且例如不size_t
?
谢谢,很好的解释。 – ForEveR
@DietmarKuehl但为什么'iterator_traits :: difference_type'是更好的选择?在大多数情况下,它是一个8字节带符号的整数,它已经打破了“size_t”(8字节无符号整数)可能不够大的论点! –
@GrimFandango:如何为其他迭代器做出的选择会影响我对'TremendousIterator :: difference_type'的选择?关键是使用'std :: size_t'可以防止特殊情况使用特殊选择,而使用嵌套类型可以做出合适的选择。 –