Duplicar posible:
Why does the C++ standard algorithm “count” return a ptrdiff_t instead of size_t?¿Por qué std :: count (_if) devuelve iterator :: difference_type en vez de size_t?
Hay algoritmo std::count
/std::count_if
en C++ estándar.
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);
Efectos: Devuelve el número de iteradores i en el rango [primero, último) para los que tienen las siguientes condiciones correspondientes : Valor * i ==, pred (* i) = false!.
difference_type
es iterator's difference_type
, que puede ser negativo, pero puede volver count
único valor> = 0. Por qué difference_type
y no size_t
por ejemplo?
Gracias, gran explicación. – ForEveR
@DietmarKuehl Pero ¿por qué 'iterator_traits :: difference_type' es una mejor opción? En la mayoría de los casos, se trata de un entero con signo de 8 bytes, que ya desglosa el argumento de que 'size_t' (entero de 8 bytes sin signo) puede no ser lo suficientemente grande. –
@GrimFandango: ¿Cómo afectan las elecciones hechas para otros iteradores a mi elección de 'TremendousIterator :: difference_type'? El punto es que el uso de 'std :: size_t' evitaría que casos especiales usen opciones especiales mientras que el uso del tipo anidado permite tomar decisiones adecuadas. –