Итак, я столкнулся с этой проблемой: мне нужно заменить каждый элемент std::vector<int>
на минимум того, что было до него (включительно).
Естественно, что std::partial_sum
приходит в голову - если бы я мог пройти std::min
как BinaryOp
, он выполнил бы эту работу.
Ну получается, что я не могу этого сделать, потому что std::min<int>
является перегруженной функцией - он работает как для шаблонов int
, так и initializer_list<int>
и partial_sum
не может быть создан с неизвестным типом.
Обычно это разрешается с помощью класса с шаблоном operator()
, например std::plus<void>
и т.д., но стандартная библиотека, похоже, не имеет одного для min
и max
.
Мне кажется, что я либо должен реализовать свой собственный T min<T>(T,T)
, который будет точным клоном std::min
, за исключением отсутствия перегрузки initializer_list
, или для реализации моего собственного class min
сродни std::plus
. Оба кажутся неправильными, потому что можно ожидать, что стандартная библиотека будет иметь такую основную вещь, а также основные вещи часто сложно реализовать:)
Итак, вот мои вопросы:
- Есть ли способ правильный решить эту проблему? то есть без введения новых неопределенных конструкций/записи более чем нескольких строк кода.
- Правильно ли предположить, что это стало проблемой в С++ 11, после того, как была введена
initializer_list
перегрузкаmin
? Итак, С++ 11 нарушил код, основанный на явно созданных экземплярахstd::min
?
Спасибо!