Namespaces
Variants

std:: slice

From cppreference.net
ヘッダーで定義 <valarray>
class slice ;

std::slice は、 std::valarray の部分集合を識別するセレクタクラスであり、 BLAS のスライスに類似しています。 std::slice 型のオブジェクトは3つの値、開始インデックス、ストライド、および部分集合内の値の総数を保持します。 std::slice 型のオブジェクトは、valarrayの operator [ ] のインデックスとして使用できます。

目次

メンバー関数

(constructor)
sliceを構築する
(public member function)
start size stride
sliceのパラメータを返す
(public member function)

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 - スライス内の連続する要素間の位置数
other - コピーする別のスライス

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)
2つのスライスが等しいかどうかをチェックする
(関数)

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++規格に対して遡及的に適用されました。

DR Applied to Behavior as published Correct behavior
LWG 543 C++98 デフォルト構築されたsliceが使用可能かどうか不明確であった 使用可能である(空のサブセットとして)

関連項目

valarrayの要素、スライス、またはマスクの取得/設定
(公開メンバ関数)
valarrayの一般化されたスライス:開始インデックス、長さの集合、ストライドの集合
(クラス)
スライス適用後のvalarrayの部分集合へのプロキシ
(クラステンプレート)
(C++23)
多次元非所有配列ビュー
(クラステンプレート)