std::gslice_array
從 cppreference.com
在標頭 <valarray> 定義
|
||
template< class T > class gslice_array; |
||
std::gslice_array
是接受 std::gslice 實參的 valarray
下標運算符所用的輔助模板。它擁有到 std::gslice 對象所指定的數組子集的引用語義。
目錄 |
[編輯] 成員類型
類型 | 定義 |
value_type
|
T
|
[編輯] 成員函數
構造一個 gslice_array (公開成員函數) | |
銷毀一個 gslice_array (公開成員函數) | |
賦值內容 (公開成員函數) | |
在通用切片所指代的數組上進行算術運算。 (公開成員函數) |
[編輯] 示例
運行此代碼
#include <cassert> #include <cstddef> #include <iomanip> #include <iostream> #include <numeric> #include <valarray> int main() { std::valarray<int> data(32); std::iota(std::begin(data), std::end(data), 0); const std::size_t offset = 1, z = 2, y = 3, x = 4; const std::valarray<std::size_t> sizes{z, y, x}; const std::valarray<std::size_t> strides{15, 5, 1}; const std::gslice gslice = std::gslice(offset, sizes, strides); // 根据公式生成索引: // index[k] = offset + [0,1,2)*15 + [0,1,2,3)*5 + [0,1,2,3,4)*1 // = offset + inner_product(sizes[k], strides); // 其中 sizes[k] = {[0,z), [0,y), [0,x)},最右侧索引 (x) 变化最快。 // 结果是一下索引集合: // index[0] = 1 + 0*15 + 0*5 + 0*1 = 1 // index[1] = 1 + 0*15 + 0*5 + 1*1 = 2 // index[2] = 1 + 0*15 + 0*5 + 2*1 = 3 // index[3] = 1 + 0*15 + 0*5 + 3*1 = 4 // index[4] = 1 + 0*15 + 1*5 + 0*1 = 6 // index[5] = 1 + 0*15 + 1*5 + 1*1 = 7 // index[6] = 1 + 0*15 + 1*5 + 2*1 = 8 // index[7] = 1 + 0*15 + 1*5 + 3*1 = 9 // ... // index[22] = 1 + 1*15 + 2*5 + 2*1 = 28 // index[23] = 1 + 1*15 + 2*5 + 3*1 = 29 const std::valarray<int> indices = data[gslice]; for (unsigned i = 0; i != indices.size(); ++i) std::cout << std::setfill('0') << std::setw(2) << indices[i] << ' '; std::cout << "\n索引总数: " << indices.size() << '\n'; assert(indices.size() == x * y * z); data = 0; std::gslice_array<int> gslice_array = data[gslice]; gslice_array = 1; // 对应于生成的索引的单元格 = '1', 跳过的单元格 = '0'. for (auto i : data) std::cout << i << ' '; std::cout << "\n1 的求和 = " << data.sum() << '\n'; }
輸出:
01 02 03 04 06 07 08 09 11 12 13 14 16 17 18 19 21 22 23 24 26 27 28 29 索引总数: 24 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 的求和 = 24
[編輯] 參閱
到 valarray 應用切片後的子集的代理 (類模板) | |
(C++23) |
多維非擁有數組視圖 (類模板) |