命名空间
变体
操作

std::experimental::clamp

来自 cppreference.com
< cpp‎ | experimental‎ | simd
 
 
实验性
技术规范
文件系统库 (文件系统 TS)
库基础 (库基础 TS)
库基础 2 (库基础 TS v2)
库基础 3 (库基础 TS v3)
并行扩展 (并行 TS)
并行扩展 2 (并行 TS v2)
并发扩展 (并发 TS)
并发扩展 2 (并发 TS v2)
概念 (概念 TS)
范围 (范围 TS)
反射 (反射 TS)
数学特殊函数 (特殊函数 TR)
实验性非 TS
模式匹配
线性代数
std::execution
契约
2D 图形
 
 
 
定义在头文件 <experimental/simd>
template< class T, class Abi >

simd<T, Abi>

clamp( const simd<T, Abi>& v, const simd<T, Abi>& lo, const simd<T, Abi>& hi );
(并行 TS v2)

内容

[编辑] 参数

v - 要钳位的元素
lo, hi - v 钳位的边界

[编辑] 返回值

对所有 i ∈ [0size()) 应用 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)
将值钳位在一对边界值之间
(函数模板) [编辑]