Почему алгоритм std::count()
возвращает difference_type
, ведь это знаковое число, а количество вхождений чего-то во что-то может быть 0+, т.е. беззнаковое число?
С одной стороны, std::count
хочет/вынужден брать тип результата из std::iterator_traits
, а там просто нет подходящего беззнакового типа. Так как std::iterator_traits<>::difference_type
по своему замыслу должен быть достаточен для подсчета разности между двумя итераторами, он должен быть достаточен и для результата std::count
. А то, что он оказался знаковым - лишь небольшая побочная неувязочка. При разработке std::iterator_traits<>
туда стоило бы добавить некий отдельный беззнаковый count_type
(или size_type
), но в свое время этого не сделали.
С другой стороны, в дизайне стандартной библиотеки С++ по-прежнему теплится отвратительная практика совать знаковые типы туда, где им не место, только ради того, чтобы уменьшить вероятность совершения неквалифицированными программистами ошибок из-за смешения знаковых и беззнаковых типов. Например, std::shared_ptr<>::use_count()
возвращает знаковый результат якобы именно по этой причине.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Существует ли аналог алгоритма std::hypot() для вектора с 3+ элементами в стандартной библиотеке? Если нет, то можно предложить подобный по функционалу...
Такая вот проблема, пишу алгоритм для расчёта полинома Ньютона и сталкиваюсь с этой ошибкой
Дана задача: создать стек из чисел, найдти среднее арифметическое и удалить елементы меньше егоC++ Builder6
Во входном потоке задано три вещественных числа a (a > 0), b (b < 0), x (-1 < x < 1)Значения исходных данных подобраны так, что выражение имеет смысл