Common Library  0.9.5
SymMatIndexer クラス

対称行列に対する行・列へのアクセスを想定した添字演算子 [詳解]

公開メンバ関数

 SymMatIndexer ()
 デフォルト・コンストラクタ [詳解]
 
 SymMatIndexer (size_t start, size_t cols, size_t size, size_t stride, size_t step)
 先頭・行列方向に進む要素数・行方向の飛び幅を指定して構築 [詳解]
 
size_t operator() (size_t i) const
 指定した添字に対し、実際にアクセスする添字を返す [詳解]
 
size_t size () const
 要素数 ( アクセス可能な添字の最大値 + 1 ) を返す [詳解]
 
bool operator== (const SymMatIndexer &si) const
 等号演算子 [詳解]
 
bool operator!= (const SymMatIndexer &si) const
 不等号演算子 [詳解]
 

詳解

対称行列に対する行・列へのアクセスを想定した添字演算子

コンテナやランダム・アクセス反復子を下三角行列として扱い(上三角成分は対角成分に対して対称とする)、行・列方向の添字を表現する。例えば、

[0]  1   2   3
[1] [4]  5   6
[2] [5] [7]  8
[3] [6] [8] [9]

の場合、実際の値は [] 付きの要素のみでコンテナは

{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }

となり、2 行目 { 1, 4, 5, 6 } の添字は { 1, 4, 5, 6 } となる。

構築子と解体子

◆ SymMatIndexer() [1/2]

SymMatIndexer::SymMatIndexer ( )
inline

デフォルト・コンストラクタ

全パラメータはゼロで初期化される

◆ SymMatIndexer() [2/2]

SymMatIndexer::SymMatIndexer ( size_t  start,
size_t  cols,
size_t  size,
size_t  stride,
size_t  step 
)
inline

先頭・行列方向に進む要素数・行方向の飛び幅を指定して構築

先頭位置とするコンテナ上の添字を start、行方向に進む列数を cols、アクセスする要素数を size、 行方向に進む要素間の幅の初期値を stride、添字の飛び幅を step として構築する。 例えば、

SymMatIndexer p( 2, 3, 4, 3, 1 )
対称行列に対する行・列へのアクセスを想定した添字演算子
Definition: matrix.h:127

なら 2 番目の要素を先頭に、最初に 3 つ、次に 2 つ先へアクセスした後、残りは 1 つずつ進むような添字になるので、 p( 0 ) = 2, p( 1 ) = 5, p( 2 ) = 7, p( 3 ) = 8 となる。このとき、下記のような対称行列に対し、()で示した経路を進む。 但し、実体のある要素は [] 内のみであることを前提としている。

[0]  1   2   3
[1] [4]  5   6
(2)-(5)-(7)  8
[3] [6] (8) [9]

step = 2 の場合、添字は 2 つずつ進むことになる。先と同じ経路を一つおきに進める場合、

SymMatIndexer p( 2, 3, 2, 3, 2 )

とすれば p( 0 ) = 2, p( 1 ) = 7 となる。アクセスする要素数は二つなので size は半分になるのに対し、 cols の値は変化しないことに注意。

アクセス開始位置を変える場合は start を変更する。

SymMatIndexer p( 5, 2, 3, 2, 1 )

とすれば p( 0 ) = 5, p( 1 ) = 7, p( 2 ) = 8 となる。 cols の値は変化しないことに注意。

引数
start先頭のインデックス
cols行方向に進む列数
sizeアクセスする要素数
stride行方向に進む要素間の幅の初期値
step飛び幅(対称行列上での要素の飛び幅)

関数詳解

◆ operator()()

size_t SymMatIndexer::operator() ( size_t  i) const
inline

指定した添字に対し、実際にアクセスする添字を返す

  • 範囲外を参照しようとした場合は assert を返す
引数
i添字
戻り値
コンテナ上で実際にアクセスする対象の添字

◆ size()

size_t SymMatIndexer::size ( ) const
inline

要素数 ( アクセス可能な添字の最大値 + 1 ) を返す

覚え書き
変換後の添字の最大値ではなく、指定した要素数 ( size ) を返すことに注意。
戻り値
要素数

◆ operator==()

bool SymMatIndexer::operator== ( const SymMatIndexer si) const
inline

等号演算子

他の SymMatIndexer と比較して値が等しければ true を返す。比較対象は要素数以外の全てとする。

戻り値
等しい場合は true を返す。

◆ operator!=()

bool SymMatIndexer::operator!= ( const SymMatIndexer si) const
inline

不等号演算子

他の SymMatIndexer と比較して値が等しくなければ true を返す。比較対象は要素数以外の全てとする。

戻り値
等しくない場合は true を返す。

このクラス詳解は次のファイルから抽出されました: