std::slice
來自 cppreference.com
定義於標頭檔案 <valarray> |
||
class slice; |
||
std::slice
是一個選擇器類,它標識 std::valarray 的一個子集,類似於 BLAS 中的切片(slice)。std::slice
型別的物件包含三個值:起始索引、步長和子集中的元素總數。std::slice
型別的物件可以作為 valarray 的 operator[] 的索引使用。
目錄 |
[編輯] 成員函式
(建構函式) |
構造一個切片 (公開成員函式) |
startsizestride |
返回切片的引數 (公開成員函式) |
std::slice::slice
slice() |
(1) | |
slice( std::size_t start, std::size_t size, std::size_t stride ); |
(2) | |
slice( const slice& other ); |
(3) | |
構造一個新的切片。
1) 預設建構函式。等價於 slice(0, 0, 0)。此建構函式僅為允許構造切片陣列而存在。
2) 構造一個新切片,其引數為 start, size, stride。此切片將引用 size 個元素,每個元素的位置為:
start + 0 * stride
start + 1 * stride
...
start + (size - 1) * stride
3) 構造 other 的副本。
引數
start | - | 第一個元素的位置 |
size | - | 切片中的元素數量 |
stride | - | 切片中連續元素之間的位置數量 |
其他 | - | 要複製的另一個切片 |
std::slice::start, size, stride
std::size_t start() const; |
(1) | |
std::size_t size() const; |
(2) | |
std::size_t stride() const; |
(3) | |
返回構造切片時傳入的引數——分別為 start、size 和 stride。
引數
(無)
返回值
切片的引數——分別為 start、size 和 stride。
複雜度
常數時間。
[編輯] 非成員函式
operator==(std::slice) (C++20) |
檢查兩個切片是否相等 (函式) |
operator==(std::slice)
friend bool operator==( const slice& lhs, const slice& rhs ); |
(C++20 起) | |
檢查 lhs 和 rhs 的引數(start、size 和 stride)是否分別相等。
此函式對於普通的非限定查詢或限定查詢不可見,僅當 std::slice 是引數的關聯類時,才能透過實參依賴查詢找到。
!=
運算子由 operator==
合成。
引數
lhs, rhs | - | 要比較的切片 |
返回值
lhs.start() == rhs.start() && lhs.size() == rhs.size() && lhs.stride() == rhs.stride()
[編輯] 示例
一個基於 valarray 的簡易 Matrix 類,帶有一個計算跡的函式。
執行此程式碼
#include <iostream> #include <valarray> class Matrix { std::valarray<int> data; int dim; public: Matrix(int r, int c) : data(r*c), dim(c) {} int& operator()(int r, int c) { return data[r * dim + c]; } int trace() const { return data[std::slice(0, dim, dim + 1)].sum(); } }; int main() { Matrix m(3, 3); int n = 0; for (int r = 0; r < 3; ++r) for (int c = 0; c < 3; ++c) m(r, c) = ++n; std::cout << "Trace of the matrix (1,2,3) (4,5,6) (7,8,9) is " << m.trace() << '\n'; }
輸出
Trace of the matrix (1,2,3) (4,5,6) (7,8,9) is 15
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 543 | C++98 | 不清楚預設構造的切片是否可用 | 它是可用的(作為空子集) |
[編輯] 參閱
獲取/設定 valarray 元素、切片或掩碼 (公共成員函式) | |
valarray 的廣義切片:起始索引、長度集、步長集 (類) | |
應用切片後 valarray 子集的代理 (類模板) | |
(C++23) |
一個多維非擁有陣列檢視 (類模板) |