Common Library  0.9.5
tadah_fussy::SquareMatrix< T > 構造体テンプレート

正方行列クラス [詳解]

tadah_fussy::SquareMatrix< T > の継承関係図
tadah_fussy::Matrix< T >

公開型

using value_type = T
 要素の型
 
using iterator = typename Matrix< T >::iterator
 反復子の型
 
using const_iterator = typename Matrix< T >::const_iterator
 定数反復子の型
 
using size_type = typename Matrix< T >::size_type
 添字の型
 

公開メンバ関数

 SquareMatrix ()
 デフォルト・コンストラクタ [詳解]
 
 SquareMatrix (size_type size, value_type val=value_type())
 行・列数を指定して構築 [詳解]
 
template<class In >
 SquareMatrix (In s, In e, size_type sz, bool inRows=true)
 データ列を指定して構築 [詳解]
 
 SquareMatrix (const SquareMatrix &mat)
 正方行列の要素をコピーして構築(コピー・コンストラクタ) [詳解]
 
template<class U >
 SquareMatrix (const SquareMatrix< U > &mat)
 型の異なる正方行列の要素をコピーして構築 [詳解]
 
template<class U >
 SquareMatrix (const SymmetricMatrix< U > &mat)
 対称行列の要素をコピーして構築 [詳解]
 
SquareMatrixoperator= (const SquareMatrix &mat)
 代入演算子の多重定義(型の等しい正方行列を代入する) [詳解]
 
template<class U >
SquareMatrixoperator= (const SquareMatrix< U > &mat)
 代入演算子の多重定義(任意の型の正方行列を代入する) [詳解]
 
template<class U >
SquareMatrixoperator= (const SymmetricMatrix< U > &mat)
 代入演算子の多重定義(任意の型の対称行列を代入する) [詳解]
 
size_type size () const
 行列のサイズを返す [詳解]
 
size_type rows () const
 行数を返す [詳解]
 
size_type cols () const
 列数を返す [詳解]
 
void resize (size_type size, value_type val=value_type())
 要素数 ( 行数 × 列数 ) を変更する [詳解]
 
void assign (size_type size, value_type val=value_type())
 要素数 ( 行数 × 列数 ) を変更し、値を初期化する [詳解]
 
template<class In >
void assign (In s, In e, size_type sz, bool inRows)
 データ列を指定して行列を初期化する [詳解]
 
iterator operator[] (size_type r)
 指定した行番号の反復子を返す(添字演算子) [詳解]
 
const_iterator operator[] (size_type r) const
 指定した行番号の定数反復子を返す(添字演算子) [詳解]
 
iterator row (size_type r, size_type start=0, size_type stride=1)
 指定した行番号の反復子を返す [詳解]
 
const_iterator row (size_type r, size_type start=0, size_type stride=1) const
 指定した行番号の定数反復子を返す [詳解]
 
iterator cbegin (size_type c)
 指定した列番号の反復子を返す [詳解]
 
const_iterator cbegin (size_type c) const
 指定した列番号の定数反復子を返す [詳解]
 
iterator column (size_type c, size_type start=0, size_type stride=1)
 指定した列番号の反復子を返す [詳解]
 
const_iterator column (size_type c, size_type start=0, size_type stride=1) const
 指定した列番号の定数反復子を返す [詳解]
 
iterator begin ()
 先頭位置から始まる全要素へアクセス可能な反復子を返す [詳解]
 
const_iterator begin () const
 先頭位置から始まる全要素へアクセス可能な定数反復子を返す [詳解]
 
iterator end ()
 要素の末尾を表す反復子を返す [詳解]
 
const_iterator end () const
 要素の末尾を表す定数反復子を返す [詳解]
 
void transpose ()
 要素の転置を行う [詳解]
 
template<typename U >
SquareMatrix< T > & operator*= (const SquareMatrix< U > &mat)
 行列と掛け合わせる [詳解]
 

その他の継承メンバ

- 基底クラス tadah_fussy::Matrix< T > に属する継承非公開型
using value_type = T
 要素の型
 
using iterator = indexer_iterator::Normal< std::valarray< T >, indexer::Slice >
 反復子の型
 
using const_iterator = indexer_iterator::Constant< std::valarray< T >, indexer::Slice >
 定数反復子の型
 
using size_type = size_t
 添字の型
 
- 基底クラス tadah_fussy::Matrix< T > に属する継承非公開メンバ関数
 Matrix ()
 デフォルト・コンストラクタ [詳解]
 
 Matrix (size_type rows, size_type cols, value_type val=value_type())
 行・列数を指定して構築 [詳解]
 
template<class In >
 Matrix (In s, In e, size_type sz, bool inRows)
 データ列を指定して構築 [詳解]
 
 Matrix (const Matrix &mat)
 行列の要素をコピーして構築(コピー・コンストラクタ) [詳解]
 
template<class U >
 Matrix (const Matrix< U > &mat)
 任意の型の行列の要素をコピーして構築 [詳解]
 
template<class U >
 Matrix (const SquareMatrix< U > &mat)
 正方行列の要素をコピーして構築 [詳解]
 
template<class U >
 Matrix (const SymmetricMatrix< U > &mat)
 対称行列の要素をコピーして構築 [詳解]
 
Matrixoperator= (const Matrix &mat)
 代入演算子の多重定義(型が等しい行列の代入) [詳解]
 
template<class U >
Matrixoperator= (const Matrix< U > &mat)
 代入演算子の多重定義(任意の型の行列の代入) [詳解]
 
template<class U >
Matrixoperator= (const SquareMatrix< U > &mat)
 代入演算子の多重定義(正方行列の代入) [詳解]
 
template<class U >
Matrixoperator= (const SymmetricMatrix< U > &mat)
 代入演算子の多重定義(対称行列の代入) [詳解]
 
void resize (size_type rows, size_type cols, value_type val=value_type())
 要素数 ( 行数 × 列数 ) を変更する [詳解]
 
void assign (size_type rows, size_type cols, value_type val=value_type())
 要素数 ( 行数 × 列数 ) を変更し、値を初期化する [詳解]
 
template<class In >
void assign (In s, In e, size_type sz, bool inRows)
 行列をデータ列で初期化する [詳解]
 
size_type rows () const
 行数を返す [詳解]
 
size_type cols () const
 列数を返す [詳解]
 
iterator operator[] (size_type r)
 指定した行番号の反復子を返す(添字演算子) [詳解]
 
const_iterator operator[] (size_type r) const
 指定した行番号の定数反復子を返す(添字演算子) [詳解]
 
iterator row (size_type r, size_type start=0, size_type stride=1)
 指定した行番号の反復子を返す [詳解]
 
const_iterator row (size_type r, size_type start=0, size_type stride=1) const
 指定した行番号の定数反復子を返す [詳解]
 
iterator cbegin (size_type c)
 指定した列番号の反復子を返す [詳解]
 
const_iterator cbegin (size_type c) const
 指定した列番号の定数反復子を返す [詳解]
 
iterator column (size_type c, size_type start=0, size_type stride=1)
 指定した列番号の反復子を返す [詳解]
 
const_iterator column (size_type c, size_type start=0, size_type stride=1) const
 指定した列番号の定数反復子を返す [詳解]
 
iterator begin ()
 先頭位置から始まる全要素へアクセス可能な反復子を返す [詳解]
 
const_iterator begin () const
 先頭位置から始まる全要素へアクセス可能な定数反復子を返す [詳解]
 
iterator end ()
 要素の末尾を表す反復子を返す [詳解]
 
const_iterator end () const
 要素の末尾を表す定数反復子を返す [詳解]
 
void transpose ()
 要素の転置を行う [詳解]
 

詳解

template<typename T>
struct tadah_fussy::SquareMatrix< T >

正方行列クラス

テンプレート引数の T は要素の型を表す。 SquareMatrix クラスは要素へのアクセスやサイズ変更・取得などの関数を持つ。 演算用のメンバ関数として operator*= を持つが、それを利用しなければ四則演算を持たないような型も要素にすることができる。

SquareMatrix には専用の反復子が indexer_iterator::Normalindexer_iterator::Constant を利用して用意されている。 SquareMatrix の行や列に対して反復子を使ってループ処理を行うことができる。 また、添字を使って直接特定の要素へアクセスすることも可能である。

構築子と解体子

◆ SquareMatrix() [1/6]

template<typename T >
tadah_fussy::SquareMatrix< T >::SquareMatrix ( )
inline

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

行列数はゼロで初期化する。

◆ SquareMatrix() [2/6]

template<typename T >
tadah_fussy::SquareMatrix< T >::SquareMatrix ( size_type  size,
value_type  val = value_type() 
)
inlineexplicit

行・列数を指定して構築

要素は初期値 val で初期化される。val のデフォルトは value_type のデフォルト値になる。

引数
size行・列数
val初期値

◆ SquareMatrix() [3/6]

template<typename T >
template<class In >
tadah_fussy::SquareMatrix< T >::SquareMatrix ( In  s,
In  e,
size_type  sz,
bool  inRows = true 
)
inline

データ列を指定して構築

データが不足した場合、残りの要素は value_type のデフォルト値となる。

引数
sデータ列の開始位置
eデータ列の末尾の次の位置
sz行列のサイズ
inRowstrue なら行方向(一列を並べたら次の列へ進む)に、false なら列方向(一行を並べたら次の行へ進む)にデータ列を並べる

◆ SquareMatrix() [4/6]

template<typename T >
tadah_fussy::SquareMatrix< T >::SquareMatrix ( const SquareMatrix< T > &  mat)
inline

正方行列の要素をコピーして構築(コピー・コンストラクタ)

引数
matコピー元の正方行列

◆ SquareMatrix() [5/6]

template<typename T >
template<class U >
tadah_fussy::SquareMatrix< T >::SquareMatrix ( const SquareMatrix< U > &  mat)
inlineexplicit

型の異なる正方行列の要素をコピーして構築

覚え書き
コピー元と要素の型が異なるため型の変換が発生することに注意。
引数
matコピー元の正方行列

◆ SquareMatrix() [6/6]

template<typename T >
template<class U >
tadah_fussy::SquareMatrix< T >::SquareMatrix ( const SymmetricMatrix< U > &  mat)
inlineexplicit

対称行列の要素をコピーして構築

覚え書き
コピー元と要素の型が異なる場合は型の変換が発生することに注意。
引数
matコピー元の対称行列

関数詳解

◆ operator=() [1/3]

template<typename T >
SquareMatrix& tadah_fussy::SquareMatrix< T >::operator= ( const SquareMatrix< T > &  mat)
inline

代入演算子の多重定義(型の等しい正方行列を代入する)

引数
mat代入元の正方行列

◆ operator=() [2/3]

template<typename T >
template<class U >
SquareMatrix& tadah_fussy::SquareMatrix< T >::operator= ( const SquareMatrix< U > &  mat)
inline

代入演算子の多重定義(任意の型の正方行列を代入する)

覚え書き
代入元と要素の型が異なるため型の変換が発生することに注意。
引数
mat代入元の正方行列

◆ operator=() [3/3]

template<typename T >
template<class U >
SquareMatrix& tadah_fussy::SquareMatrix< T >::operator= ( const SymmetricMatrix< U > &  mat)
inline

代入演算子の多重定義(任意の型の対称行列を代入する)

覚え書き
代入元と要素の型が異なる場合は型の変換が発生することに注意。
引数
mat代入元の対称行列

◆ size()

template<typename T >
size_type tadah_fussy::SquareMatrix< T >::size ( ) const
inline

行列のサイズを返す

戻り値
行列のサイズ

◆ rows()

template<typename T >
size_type tadah_fussy::SquareMatrix< T >::rows ( ) const
inline

行数を返す

Matrix との互換性のためにあるが、SquareMatrix< T >::size() と内容は同じである。

戻り値
行数

◆ cols()

template<typename T >
size_type tadah_fussy::SquareMatrix< T >::cols ( ) const
inline

列数を返す

Matrix との互換性のためにあるが、SquareMatrix< T >::size() と内容は同じである。

戻り値
列数

◆ resize()

template<typename T >
void tadah_fussy::SquareMatrix< T >::resize ( size_type  size,
value_type  val = value_type() 
)
inline

要素数 ( 行数 × 列数 ) を変更する

行・列それぞれの方向に対し、サイズが小さくなる場合は末尾側の要素は削除され、 大きくなる場合は増分が初期値 val で埋められる。 元の要素は(削除されなければ)残る。その必要がない場合は、 assign( size_type size, value_type val ) を使ったほうが効率がよい。

引数
size行・列数
val増分に対する初期値
戻り値
なし

◆ assign() [1/2]

template<typename T >
void tadah_fussy::SquareMatrix< T >::assign ( size_type  size,
value_type  val = value_type() 
)
inline

要素数 ( 行数 × 列数 ) を変更し、値を初期化する

引数
size行・列数
val初期化する値
戻り値
なし

◆ assign() [2/2]

template<class T >
template<class In >
void tadah_fussy::SquareMatrix< T >::assign ( In  s,
In  e,
size_type  sz,
bool  inRows 
)

データ列を指定して行列を初期化する

データが不足した場合、残りの要素は value_type のデフォルト値となる。

テンプレート引数の In はデータ列 [ s, e ) に対する反復子の型を表す。

  • データ列 [ s, e ) の指定が不正だった場合、ExceptionNegativeLength< std::iterator_traits< In >::difference_type > 例外を投げる。
引数
sデータ列の開始位置
eデータ列の末尾の次の位置
sz行(または列)のサイズ
inRowstrue なら行方向(一列を並べたら次の列へ進む)に、false なら列方向(一行を並べたら次の行へ進む)にデータ列を並べる

◆ operator[]() [1/2]

template<typename T >
iterator tadah_fussy::SquareMatrix< T >::operator[] ( size_type  r)
inline

指定した行番号の反復子を返す(添字演算子)

覚え書き
添字に対するチェックは行わない。
引数
r行番号
戻り値
行の反復子

◆ operator[]() [2/2]

template<typename T >
const_iterator tadah_fussy::SquareMatrix< T >::operator[] ( size_type  r) const
inline

指定した行番号の定数反復子を返す(添字演算子)

覚え書き
添字に対するチェックは行わない。
引数
r行番号
戻り値
行の定数反復子

◆ row() [1/2]

template<typename T >
iterator tadah_fussy::SquareMatrix< T >::row ( size_type  r,
size_type  start = 0,
size_type  stride = 1 
)
inline

指定した行番号の反復子を返す

  • 範囲外の行番号を指定した場合は out_of_range 例外を投げる。
  • 列方向の飛び幅がゼロの場合、ExceptionNotPositiveNumber< SquareMatrix< T >::size_type > 例外を投げる。
引数
r行番号
start列番号の開始位置
stride列方向の飛び幅
戻り値
行の反復子

◆ row() [2/2]

template<typename T >
const_iterator tadah_fussy::SquareMatrix< T >::row ( size_type  r,
size_type  start = 0,
size_type  stride = 1 
) const
inline

指定した行番号の定数反復子を返す

  • 範囲外の行番号を指定した場合は out_of_range 例外を投げる。
  • 列方向の飛び幅がゼロの場合、ExceptionNotPositiveNumber< SquareMatrix< T >::size_type > 例外を投げる。
引数
r行番号
start列番号の開始位置
stride列方向の飛び幅
戻り値
行の定数反復子

◆ cbegin() [1/2]

template<typename T >
iterator tadah_fussy::SquareMatrix< T >::cbegin ( size_type  c)
inline

指定した列番号の反復子を返す

覚え書き
添字に対するチェックは行わない。
引数
c列番号
戻り値
列の反復子

◆ cbegin() [2/2]

template<typename T >
const_iterator tadah_fussy::SquareMatrix< T >::cbegin ( size_type  c) const
inline

指定した列番号の定数反復子を返す

覚え書き
添字に対するチェックは行わない。
引数
c列番号
戻り値
列の定数反復子

◆ column() [1/2]

template<typename T >
iterator tadah_fussy::SquareMatrix< T >::column ( size_type  c,
size_type  start = 0,
size_type  stride = 1 
)
inline

指定した列番号の反復子を返す

  • 範囲外の列番号を指定した場合は out_of_range 例外を投げる。
  • 行方向の飛び幅がゼロの場合、ExceptionNotPositiveNumber< SquareMatrix< T >::size_type > 例外を投げる。
引数
c列番号
start行番号の開始位置
stride行方向の飛び幅
戻り値
列の反復子

◆ column() [2/2]

template<typename T >
const_iterator tadah_fussy::SquareMatrix< T >::column ( size_type  c,
size_type  start = 0,
size_type  stride = 1 
) const
inline

指定した列番号の定数反復子を返す

  • 範囲外の列番号を指定した場合は out_of_range 例外を投げる。
  • 行方向の飛び幅がゼロの場合、ExceptionNotPositiveNumber< SquareMatrix< T >::size_type > 例外を投げる。
引数
c列番号
start行番号の開始位置
stride行方向の飛び幅
戻り値
列の定数反復子

◆ begin() [1/2]

template<typename T >
iterator tadah_fussy::SquareMatrix< T >::begin ( )
inline

先頭位置から始まる全要素へアクセス可能な反復子を返す

この反復子は先頭から同列の次の行へとたどり、末尾に達したら次の列の先頭に移る。

戻り値
対象の反復子

◆ begin() [2/2]

template<typename T >
const_iterator tadah_fussy::SquareMatrix< T >::begin ( ) const
inline

先頭位置から始まる全要素へアクセス可能な定数反復子を返す

この反復子は先頭から同列の次の行へとたどり、末尾に達したら次の列の先頭に移る。

戻り値
対象の定数反復子

◆ end() [1/2]

template<typename T >
iterator tadah_fussy::SquareMatrix< T >::end ( )
inline

要素の末尾を表す反復子を返す

このメンバ関数で返される反復子は、begin() で得た先頭位置から始まる全要素へアクセス可能な反復子の末尾を表す。 行・列に対する反復子の末尾は、indexer_iterator::end や const_indexer_iterator::end で得ることに注意。 例えば以下は 1 列目の列ベクトルのノルムを計算するためのプログラムで、末尾の指定は a->end() ではなく col.end() となっている。

SquareMatrix< double >::const_iterator col = a->column( 0 ); // 行列 a の 1 列目の先頭
double norm = std::inner_product( col, col.end(), col, 0.0 );
typename Matrix< T >::const_iterator const_iterator
定数反復子の型
Definition: matrix.h:1400
戻り値
末尾の反復子

◆ end() [2/2]

template<typename T >
const_iterator tadah_fussy::SquareMatrix< T >::end ( ) const
inline

要素の末尾を表す定数反復子を返す

このメンバ関数で返される反復子は、begin() で得た先頭位置から始まる全要素へアクセス可能な反復子の末尾を表す。 行・列に対する反復子の末尾は、indexer_iterator::end や const_indexer_iterator::end で得ることに注意。 例えば以下は 1 列目の列ベクトルのノルムを計算するためのプログラムで、末尾の指定は a->end() ではなく col.end() となっている。

SquareMatrix< double >::const_iterator col = a->column( 0 ); // 行列 a の 1 列目の先頭
double norm = std::inner_product( col, col.end(), col, 0.0 );
戻り値
末尾の定数反復子

◆ transpose()

template<class T >
void tadah_fussy::SquareMatrix< T >::transpose

要素の転置を行う

戻り値
なし

◆ operator*=()

template<class T >
template<typename U >
SquareMatrix< T > & tadah_fussy::SquareMatrix< T >::operator*= ( const SquareMatrix< U > &  mat)

行列と掛け合わせる

  • サイズが、掛け合わせる行列のサイズと等しくないときは、ExceptionNotEqualLength< SquareMatrix< T >::size_type > を投げる。

    todo:
    MatrixLib::mult( const MATRIX1& mat1, const MATRIX2& mat2, SquareMatrix< Res >* res ) が あるので不要。将来は廃止予定。
引数
mat対象行列への参照
戻り値
自分自身への参照

この構造体詳解は次のファイルから抽出されました: