- simd[meta header]
- std::simd[meta namespace]
- function template[meta id-type]
- cpp26[meta cpp]
namespace std::simd {
template<class T, class Abi>
constexpr basic_vec<T, Abi>
clamp(const basic_vec<T, Abi>& v,
const basic_vec<T, Abi>& lo,
const basic_vec<T, Abi>& hi); // C++26
}clampは、basic_vecの各要素を、要素ごとに指定した範囲[lo, hi]に収める関数である。各要素がloより小さければloに、hiより大きければhiに切り詰められる。
Tがstd::totally_orderedのモデルであること
loのどの要素も、hiの対応する要素より大きくないこと
i番目の要素がclamp(v[i], lo[i], hi[i])となるbasic_vec。
投げない
#include <simd>
#include <print>
namespace simd = std::simd;
int main()
{
simd::vec<int, 4> v([](int i) { return i * 2; }); // {0, 2, 4, 6}
simd::vec<int, 4> lo = 1; // {1, 1, 1, 1}
simd::vec<int, 4> hi = 5; // {5, 5, 5, 5}
// 各要素を範囲[1, 5]に収める
auto r = simd::clamp(v, lo, hi); // {1, 2, 4, 5}
for (int i = 0; i < r.size(); ++i)
std::print("{} ", r[i]);
std::println("");
}- simd::clamp[color ff0000]
- simd::vec[link basic_vec.md]
1 2 4 5
- C++26
- Clang: 22 [mark noimpl]
- GCC: 16.1 [mark noimpl]
- Visual C++: 2026 Update 2 [mark noimpl]
- P1928R15 std::simd — merge data-parallel types from the Parallelism TS 2
- C++26で
std::simdライブラリが追加された
- C++26で