名稱空間
變體
操作

std::slice

來自 cppreference.com
< cpp‎ | 數值‎ | valarray
 
 
 
 
定義於標頭檔案 <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 起)

檢查 lhsrhs 的引數(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)
一個多維非擁有陣列檢視
(類模板) [編輯]