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("");
}
出力
1 2 4 5
バージョン
言語
- C++26
処理系
- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌
関連項目
参照
- P1928R15 std::simd — merge data-parallel types from the Parallelism TS 2
- C++26で
std::simdライブラリが追加された
- C++26で