std::experimental::where_expression
來自 cppreference.com
< cpp | experimental | simd
| 定義於標頭檔案 <experimental/simd> |
||
| template< class M, class V > class where_expression; |
(並行技術規範 v2) | |
類模板 where_expression 抽象了給定算術或資料並行型別的左值中選定元素的概念。選定元素是左值(型別為 V)的元素,其對應的掩碼(型別為 M)元素為 true。應用於 where_expression<M, V> 型別物件的運算子僅應用於選定元素。所有其他元素保持不變。
使用 where 函式構造 where_expression 物件。
[編輯] 模板引數
| M | - | 掩碼型別 |
| V | - | M 應用於的值型別 |
(M, V) 的有效組合是
-
(simd_mask<T, Abi>,simd<T, Abi>), -
(simd_mask<T, Abi>,simd_mask<T, Abi>), -
(bool,T).
[編輯] 成員函式
| 賦值給選定位置 (公開成員函式) | |
| 複合運算子 (公開成員函式) | |
| 增量和減量運算子 (公開成員函式) | |
| 從地址載入到選定位置 (公開成員函式) |
[編輯] 示例
執行此程式碼
#include <cstddef> #include <experimental/simd> #include <iostream> namespace stdx = std::experimental; void print(auto const& a) { for (std::size_t i{}; i != std::size(a); ++i) std::cout << a[i] << ' '; std::cout << '\n'; } template<class A> stdx::simd<int, A> my_abs(stdx::simd<int, A> x) { where(x < 0, x) = -x; return x; } int main() { const stdx::native_simd<int> a([](int i) { return i - 2; }); print(a); const auto b = my_abs(a); print(b); }
可能的輸出
-2 -1 0 1 2 1 0 1