◐ Shell
clean mode source ↗

std::slice - cppreference.com

提供: cppreference.com

<tbody> </tbody>

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

メンバ関数

std::slice::slice

<tbody> </tbody>

slice()

slice( std::size_t start, std::size_t size, std::size_t stride );

slice( const slice& other );

新しいスライスを構築します。

1) デフォルトコンストラクタ。 slice(0, 0, 0) と同等です。 このコンストラクタはスライスの配列の構築を可能とするためだけに存在しています。

2) パラメータ startsizestride を持つ新しいスライスを構築します。 このスライスはそれぞれが以下の位置を持つ size 個の要素を参照します。

start + 0*stride

start + 1*stride

...

start + (size-1)*stride

3) other のコピーを構築します。

引数

start - 最初の要素の位置
size - スライス内の要素数
stride - スライス内の連続する要素間の位置数
other - コピーする別のスライス

std::slice::start, size, stride

<tbody> </tbody>

std::size_t start() const;

(1)

std::size_t size() const;

(2)

std::size_t stride() const;

(3)

構築時にスライスに渡されたパラメータ start、 size、 stride をそれぞれ返します。

引数

(なし)

戻り値

スライスのパラメータ start、 size、 stride。

計算量

一定。

を計算する関数を持つ valarray をベースとした最小限の行列クラス。

#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

関連項目