std::slice - cppreference.com
提供: cppreference.com
<tbody> </tbody>
std::slice は BLAS のスライスに似た std::valarray の部分集合を表すセレクタクラスです。 std::slice 型のオブジェクトは3つの値、開始インデックス、ストライド、および部分集合内の値の合計個数を保持します。 std::slice 型のオブジェクトは valarray の operator[] でインデックスとして使用できます。
メンバ関数
std::slice::slice
<tbody> </tbody>
|
|
||
|
|
||
|
|
||
新しいスライスを構築します。
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>
|
|
(1) | |
|
|
(2) | |
|
|
(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