std::slice
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <valarray> で定義
|
||
class slice; |
||
std::slice は BLAS のスライスに似た 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) パラメータ
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
<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 をベースとした最小限の行列クラス。
Run this code
#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
関連項目
| valarray の要素、スライス、マスクを取得または設定します (パブリックメンバ関数) | |
| 一般化された valarray のスライス: 開始位置、長さのセット、ストライドのセット (クラス) | |
| slice 適用後の valarray のサブセットへのプロキシ (クラステンプレート) |