std::experimental::clamp
来自cppreference.com
| 在标头 <experimental/simd> 定义
|
||
| |
(并行 TS v2) | |
参数
| v | - | 要夹住的元素 |
| lo, hi | - | 夹住 v 的边界
|
返回值
对所有 i ∈ [0, size()) 逐元素应用 std::clamp(v[i], lo[i], hi[i]) 的结果。
示例
运行此代码
#include <cstddef>
#include <cstdint>
#include <experimental/simd>
#include <iomanip>
#include <iostream>
namespace stdx = std::experimental;
void println(auto rem, auto const v)
{
std::cout << rem << ": ";
for (std::size_t i = 0; i != v.size(); ++i)
std::cout << std::setw(4) << v[i] << ' ';
std::cout << '\n';
}
int main()
{
stdx::fixed_size_simd<int, 8> a{[](int i) {
static constexpr auto c = {-129, -128, -1, 0, 42, 127, 128, 255};
return c.begin()[i];
}};
println("a", a);
stdx::fixed_size_simd<int, 8> lo1{INT8_MIN};
stdx::fixed_size_simd<int, 8> hi1{INT8_MAX};
const auto b = stdx::clamp(a, lo1, hi1);
println("b", b);
stdx::fixed_size_simd<int, 8> lo2{0};
stdx::fixed_size_simd<int, 8> hi2{UINT8_MAX};
const auto c = stdx::clamp(a, lo2, hi2);
println("c", c);
}
输出:
a: -129 -128 -1 0 42 127 128 255
b: -128 -128 -1 0 42 127 127 127
c: 0 0 0 0 42 127 128 255
参阅
(C++17) |
在一对边界值下夹逼一个值 (函数模板) |