Почему std::count() возвращает знаковое число?

131
27 августа 2019, 23:40

Почему алгоритм std::count() возвращает difference_type, ведь это знаковое число, а количество вхождений чего-то во что-то может быть 0+, т.е. беззнаковое число?

Answer 1

С одной стороны, std::count хочет/вынужден брать тип результата из std::iterator_traits, а там просто нет подходящего беззнакового типа. Так как std::iterator_traits<>::difference_type по своему замыслу должен быть достаточен для подсчета разности между двумя итераторами, он должен быть достаточен и для результата std::count. А то, что он оказался знаковым - лишь небольшая побочная неувязочка. При разработке std::iterator_traits<> туда стоило бы добавить некий отдельный беззнаковый count_type (или size_type), но в свое время этого не сделали.

С другой стороны, в дизайне стандартной библиотеки С++ по-прежнему теплится отвратительная практика совать знаковые типы туда, где им не место, только ради того, чтобы уменьшить вероятность совершения неквалифицированными программистами ошибок из-за смешения знаковых и беззнаковых типов. Например, std::shared_ptr<>::use_count() возвращает знаковый результат якобы именно по этой причине.

READ ALSO
Алгоритм hypot для 3 и более элементов

Алгоритм hypot для 3 и более элементов

Существует ли аналог алгоритма std::hypot() для вектора с 3+ элементами в стандартной библиотеке? Если нет, то можно предложить подобный по функционалу...

133
Stak around the variable was corrupted

Stak around the variable was corrupted

Такая вот проблема, пишу алгоритм для расчёта полинома Ньютона и сталкиваюсь с этой ошибкой

140
Стек, ошибка Access violation at address с разными размерами

Стек, ошибка Access violation at address с разными размерами

Дана задача: создать стек из чисел, найдти среднее арифметическое и удалить елементы меньше егоC++ Builder6

134
c++ вычислить значение выражения

c++ вычислить значение выражения

Во входном потоке задано три вещественных числа a (a > 0), b (b < 0), x (-1 < x < 1)Значения исходных данных подобраны так, что выражение имеет смысл

126