Возможный дубликат:
Почему стандартный алгоритм C ++ «count» возвращает ptrdiff_t вместо 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 в диапазоне [first, last), для которого следующее соответствующее
выполняются условия: * i == значение, pred (* i)! = false.
difference_type
является iterator's difference_type
, который может быть отрицательным, но count
может вернуть только значение> = 0. Почему difference_type
и не size_t
например?
В теории у вас может быть огромная последовательность, количество элементов которой может быть представлено только 128 битами. Предполагая, что реализация поддерживает соответствующий целочисленный тип, весьма вероятно, что size_t
используйте 64-битный тип. Тем не менее, итератор для этой огромной последовательности может использовать 128-битное целое число. Обратите внимание, что последовательность не обязательно представлена в памяти какого-либо отдельного компьютера. Он может быть разбит на несколько огромных баз данных.
У вас также может быть относительно небольшой компьютер, поддерживающий только 32-битный тип с приемлемой производительностью. Для полного соответствия стандарту может потребоваться поддержка 64-битного типа, но может быть желательно поддерживать более быстрые вычисления с использованием представления, изначально поддерживаемого платформой. То есть, size_t
не может быть оптимальным выбором. При создании итераторов вы обычно знаете, какой размер нужно поддерживать.
Других решений пока нет …