Только что понял, что std::count_if
возвращает значение со знаком.
Почему он разработан таким образом? Это не имеет смысла (результатом может быть только натуральное число, то есть неотрицательное целое число), на мой взгляд, так как это не позволяет сделать что-то настолько простое, как сравнение этого результата с size()
контейнера без получения предупреждения или использования явного преобразование типов.
Я действительно думаю, что возвращаемый тип должен иметь size_type
.
Я что-то упускаю?
difference_type
итератора дляcount
, так как это в значительной степени просто разница аргументов, имеет смысл сохранить этот интерфейс дляcount_if
, и в равной степени имеет смысл дляdifference_type
быть подписанным для двунаправленного итераторы. - person BoBTFish   schedule 10.03.2015std::list
за постоянное время? - person W.F.   schedule 10.03.2015.size()
, что означает, что он кэширован, - person MSalters   schedule 10.03.2015push_front
в списке, не делая недействительными существующие итераторы, и, очевидно, это изменяет положение всех существующих итераторов на единицу. - person MSalters   schedule 10.03.2015