gpt4 book ai didi

std::vector 的 C++ 钳位函数

转载 作者:太空狗 更新时间:2023-10-29 23:49:11 25 4
gpt4 key购买 nike

void Clamp(std::vector<double>& input_image, double min_value, double max_value, int width, int height)
{
for (int j = 0; j < width; j++)
{
for (int i = 0; i < height; i++)
{
input_image[i*width + j] = std::min(std::max(input_image[i*width + j], min_value), max_value);
}
}
}

我正在尝试创建这种钳位功能。

使用 std::vector 有更好的方法吗?

我也可以使用 C++11

最佳答案

C++17 有 std::clamp .也不需要 heightwidth本例中的参数。

void clamp_vec(std::vector<double>& input_image, double min_value, double max_value) {
std::transform(std::begin(input_image), std::end(input_image), std::begin(input_image),
[=] (auto i) { return std::clamp(i, min_value, max_value); });
}

泛型类型的模板版本只要运算符< 就可以工作。定义:

template <typename T>
void clamp_vec(std::vector<T>& input_image, const T& min_value, const T& max_value) {
std::transform(std::begin(input_image), std::end(input_image), std::begin(input_image),
[&] (const T& v) { return std::clamp(v, min_value, max_value); });
}

如果std::clamp不可用,您可以实现自己的,直到 C++17 出现,例如:

template <typename T>
constexpr const T& clamp(const T& v, const T& lo, const T& hi) {
return clamp(v, lo, hi, std::less<>());
}

template <typename T, typename Compare>
constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp) {
return comp(v, lo) ? lo : comp(hi, v) ? hi : v;
}

关于std::vector 的 C++ 钳位函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45541921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com