将vector中的值控制在特定数值范围内——std::clamp
How to do it...
#include <iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std;static auto norm (int min, int max, int new_max) { const double diff (max - min); return [=] (int val) { return int((val - min) / diff * new_max); }; }static auto clampval (int min, int max) { return [=] (int val) -> int { return clamp(val, min, max); }; }int main() { vector<int> v {0, 1000, 5, 250, 300, 800, 900, 321};const auto [min_it, max_it] ( minmax_element(begin(v), end(v)));vector<int> v_norm; v_norm.reserve(v.size());transform(begin(v), end(v), back_inserter(v_norm), norm(*min_it, *max_it, 255));copy(begin(v_norm), end(v_norm), ostream_iterator<int>{cout, ", "}); cout << '\n';transform(begin(v), end(v), begin(v_norm), clampval(0, 255));copy(begin(v_norm), end(v_norm), ostream_iterator<int>{cout, ", "}); cout << '\n'; }$ ./reducing_range_in_vector 0, 255, 1, 63, 76, 204, 229, 81, 0, 255, 5, 250, 255, 255, 255, 255,
How it works...
Last updated
