Re: В вещественном массиве отнармировать все числа по максимальному элементу.Как это
Добавлено: 12 дек 2015, 20:59
Ну и вариант который не знает про типы вообще ничего. С++14, на более старых вариантах код получится более кучерявым.
Код: Выделить всё
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <deque>
namespace detail {
// generic abs algorithm
template<typename T> constexpr auto abs(const T& value) -> T
{
return value < T{} ? -value : value;
}
}
template<typename T> constexpr auto abs(const T& value) -> T
{
using std::abs;
using detail::abs;
return abs(value);
}
template <typename Iterator> void Norm(Iterator begin, Iterator end)
{
auto maxElItr = std::max_element(begin, end, [](auto lho, auto rho) -> bool {
return abs(lho) < abs(rho);
});
if (maxElItr != end) {
auto maxEl = abs(*maxElItr);
auto zero = decltype(maxEl) {};
if (zero < maxEl) {
for (auto itr = begin; itr != end; ++itr) {
*itr /= maxEl;
}
}
}
}
int main()
{
double a[] = {1.2, 1.2, 1.2, 1.2, 1.2 };
std::deque<float> b = { 0.2f, 1.2f, 0.0f, 3.0f, 0.8f };
Norm(a, a + sizeof(a) /sizeof(a[0]));
Norm(b.begin(), b. end());
return 0;
}