Common Library  0.9.5
Matrix< T > クラステンプレート

行列(二次元配列)クラス [詳解]

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

公開型

typedef T value_type
 要素の型
 
typedef indexer_iterator< std::valarray< T >, SliceIndexeriterator
 反復子の型
 
typedef const_indexer_iterator< std::valarray< T >, SliceIndexerconst_iterator
 定数反復子の型
 
typedef size_t size_type
 添字の型
 

公開メンバ関数

 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<class T>
class Matrix< T >

行列(二次元配列)クラス

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

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

構築子と解体子

◆ Matrix() [1/7]

template<class T >
Matrix< T >::Matrix ( )
inline

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

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

◆ Matrix() [2/7]

template<class T >
Matrix< T >::Matrix ( size_type  rows,
size_type  cols,
value_type  val = value_type() 
)
inline

行・列数を指定して構築

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

引数
rows行数
cols列数
val初期値

◆ Matrix() [3/7]

template<class T >
template<class In >
Matrix< T >::Matrix ( In  s,
In  e,
size_type  sz,
bool  inRows 
)
inline

データ列を指定して構築

inRows が true なら sz は行のサイズを表し、全てのデータが行列に代入される最小のサイズが列数となる。 inRows が false なら sz は列のサイズを表し、全てのデータが行列に代入される最小のサイズが行数となる。 データが不足した場合、残りの要素は value_type のデフォルト値となる。

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

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

◆ Matrix() [4/7]

template<class T >
Matrix< T >::Matrix ( const Matrix< T > &  mat)
inline

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

引数
matコピー元の行列

◆ Matrix() [5/7]

template<class T >
template<class U >
Matrix< T >::Matrix ( const Matrix< U > &  mat)
inlineexplicit

任意の型の行列の要素をコピーして構築

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

◆ Matrix() [6/7]

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

正方行列の要素をコピーして構築

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

◆ Matrix() [7/7]

template<class T >
template<class U >
Matrix< T >::Matrix ( const SymmetricMatrix< U > &  mat)
explicit

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

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

関数詳解

◆ operator=() [1/4]

template<class T >
Matrix< T > & Matrix< T >::operator= ( const Matrix< T > &  mat)

代入演算子の多重定義(型が等しい行列の代入)

引数
mat代入元の行列

◆ operator=() [2/4]

template<class T >
template<class U >
Matrix& Matrix< T >::operator= ( const Matrix< U > &  mat)

代入演算子の多重定義(任意の型の行列の代入)

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

◆ operator=() [3/4]

template<class T >
template<class U >
Matrix& Matrix< T >::operator= ( const SquareMatrix< U > &  mat)

代入演算子の多重定義(正方行列の代入)

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

◆ operator=() [4/4]

template<class T >
template<class U >
Matrix& Matrix< T >::operator= ( const SymmetricMatrix< U > &  mat)

代入演算子の多重定義(対称行列の代入)

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

◆ resize()

template<class T >
void Matrix< T >::resize ( size_type  rows,
size_type  cols,
value_type  val = value_type() 
)

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

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

引数
rows変更後の行数
cols変更後の列数
val増分に対する初期値
戻り値
なし

◆ assign() [1/2]

template<class T >
void Matrix< T >::assign ( size_type  rows,
size_type  cols,
value_type  val = value_type() 
)
inline

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

引数
rows行数
cols列数
val初期化する値
戻り値
なし

◆ assign() [2/2]

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

行列をデータ列で初期化する

inRows が true なら sz は行のサイズを表し、全てのデータが行列に代入される最小のサイズが列数となる。 inRows が false なら sz は列のサイズを表し、全てのデータが行列に代入される最小のサイズが行数となる。 データが不足した場合、残りの要素は value_type のデフォルト値となる。

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

  • データ列 [ s, e ) の指定が不正だった場合、ExceptionNegativeLength< std::iterator_traits< In >::difference_type > 例外を投げる。
覚え書き
データ列 [ s, e ) の長さがゼロだった場合、指定したサイズ sz が 0 より大きければ、 必ず 1 行 sz 列 ( または sz 行 1 列 ) の行列が生成される。
引数
sデータ列の開始位置
eデータ列の末尾の次の位置
sz行(または列)のサイズ
inRowstrue なら行方向(一列を並べたら次の列へ進む)に、false なら列方向(一行を並べたら次の行へ進む)にデータ列を並べる

◆ rows()

template<class T >
size_type Matrix< T >::rows ( ) const
inline

行数を返す

戻り値
行数

◆ cols()

template<class T >
size_type Matrix< T >::cols ( ) const
inline

列数を返す

戻り値
列数

◆ operator[]() [1/2]

template<class T >
iterator Matrix< T >::operator[] ( size_type  r)
inline

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

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

◆ operator[]() [2/2]

template<class T >
const_iterator Matrix< T >::operator[] ( size_type  r) const
inline

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

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

◆ row() [1/2]

template<class T >
Matrix< T >::iterator Matrix< T >::row ( size_type  r,
size_type  start = 0,
size_type  stride = 1 
)

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

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

◆ row() [2/2]

template<class T >
Matrix< T >::const_iterator Matrix< T >::row ( size_type  r,
size_type  start = 0,
size_type  stride = 1 
) const

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

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

◆ cbegin() [1/2]

template<class T >
iterator Matrix< T >::cbegin ( size_type  c)
inline

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

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

◆ cbegin() [2/2]

template<class T >
const_iterator Matrix< T >::cbegin ( size_type  c) const
inline

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

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

◆ column() [1/2]

template<class T >
Matrix< T >::iterator Matrix< T >::column ( size_type  c,
size_type  start = 0,
size_type  stride = 1 
)

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

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

◆ column() [2/2]

template<class T >
Matrix< T >::const_iterator Matrix< T >::column ( size_type  c,
size_type  start = 0,
size_type  stride = 1 
) const

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

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

◆ begin() [1/2]

template<class T >
Matrix< T >::iterator Matrix< T >::begin

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

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

戻り値
対象の反復子

◆ begin() [2/2]

template<class T >
Matrix< T >::const_iterator Matrix< T >::begin

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

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

戻り値
対象の定数反復子

◆ end() [1/2]

template<class T >
Matrix< T >::iterator Matrix< T >::end

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

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

Matrix< double >::const_iterator col = a->column( 0 ); // 行列 a の 1 列目の先頭
double norm = std::inner_product( col, col.end(), col, 0.0 );
添字演算用関数オブジェクト(Indexer)を利用した定数反復子 (base_indexer_iteratorからの派生)
Definition: matrix.h:744
const_indexer_iterator end() const
末尾の次の反復子を返す
Definition: matrix.h:789
戻り値
末尾の反復子

◆ end() [2/2]

template<class T >
Matrix< T >::const_iterator Matrix< T >::end

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

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

Matrix< 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 Matrix< T >::transpose

要素の転置を行う

戻り値
なし

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