Common Library  0.9.5
tadah_fussy::SymmetricMatrix< T > クラステンプレート

対称行列クラス [詳解]

公開型

using value_type = T
 要素の型
 
using iterator = indexer_iterator::Normal< std::valarray< T >, indexer::SymMat >
 反復子の型
 
using const_iterator = indexer_iterator::Constant< std::valarray< T >, indexer::SymMat >
 定数反復子の型
 
using size_type = size_t
 添字の型
 

公開メンバ関数

 SymmetricMatrix ()
 デフォルト・コンストラクタ [詳解]
 
 SymmetricMatrix (size_type size, value_type val=value_type())
 行・列数を指定して構築 [詳解]
 
template<class In >
 SymmetricMatrix (In s, In e, size_type sz)
 データ列を指定して構築 [詳解]
 
 SymmetricMatrix (const SymmetricMatrix &mat)
 対称行列の要素をコピーして構築(コピー・コンストラクタ) [詳解]
 
template<class U >
 SymmetricMatrix (const SymmetricMatrix< U > &mat)
 型の異なる対称行列の要素をコピーして構築 [詳解]
 
SymmetricMatrixoperator= (const SymmetricMatrix &mat)
 代入演算子の多重定義 [詳解]
 
template<class U >
SymmetricMatrixoperator= (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)
 データ列を指定して行列を初期化する [詳解]
 
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
 指定した列番号の定数反復子を返す [詳解]
 
template<class U >
SymmetricMatrix< T > & operator= (const SymmetricMatrix< U > &mat)
 代入演算子の多重定義 [詳解]
 

詳解

template<typename T>
class tadah_fussy::SymmetricMatrix< T >

対称行列クラス

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

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

SymmetricMatrix は、対角を軸に対称な要素が等しいことが保証される。 そのため、非対角成分を変更した場合、対称な要素も同時に変更されることに注意。 もし、それを回避する必要があるときは MatrixSquareMatrix へコピーして利用する。

構築子と解体子

◆ SymmetricMatrix() [1/5]

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

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

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

◆ SymmetricMatrix() [2/5]

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

行・列数を指定して構築

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

引数
size行・列数
val初期値

◆ SymmetricMatrix() [3/5]

template<typename T >
template<class In >
tadah_fussy::SymmetricMatrix< T >::SymmetricMatrix ( In  s,
In  e,
size_type  sz 
)
inline

データ列を指定して構築

内部では assign( In s, In e, size_type sz ) を呼び出している。 処理の詳細については assign( In s, In e, size_type sz ) を参照。

引数
sデータ列の開始位置
eデータ列の末尾の次の位置
sz行(または列)のサイズ

◆ SymmetricMatrix() [4/5]

template<class T >
tadah_fussy::SymmetricMatrix< T >::SymmetricMatrix ( const SymmetricMatrix< T > &  mat)

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

引数
matコピー元の行列

◆ SymmetricMatrix() [5/5]

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

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

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

関数詳解

◆ operator=() [1/3]

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

代入演算子の多重定義

引数
mat代入元の行列

◆ operator=() [2/3]

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

代入演算子の多重定義

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

◆ size()

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

行列のサイズを返す

戻り値
行列のサイズ

◆ rows()

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

行数を返す

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

戻り値
行数

◆ cols()

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

列数を返す

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

戻り値
列数

◆ resize()

template<class T >
void tadah_fussy::SymmetricMatrix< T >::resize ( size_type  size,
value_type  val = value_type() 
)

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

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

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

◆ assign() [1/2]

template<typename T >
void tadah_fussy::SymmetricMatrix< 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::SymmetricMatrix< T >::assign ( In  s,
In  e,
size_type  sz 
)

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

データ列から行列への要素の代入方法が特殊であることに注意。 まず、1 列目には先頭からサイズ分の要素がコピーされる。 次の行からは、対角成分からスタートしてデータをコピーしていく。 非対角成分は対角を軸に対称なので、データは片側しか代入しない。 サイズ n の対称行列に過不足なくデータを代入するには n( n + 1 ) / 2 個の要素が必要となる。

( 1, 2, 3, 4, 5, 6 ) → | 1     |
                        | 2 4   |
                        | 3 5 6 |

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

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

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

◆ operator[]() [1/2]

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

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

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

◆ operator[]() [2/2]

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

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

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

◆ row() [1/2]

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

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

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

◆ row() [2/2]

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

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

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

◆ cbegin() [1/2]

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

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

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

◆ cbegin() [2/2]

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

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

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

◆ column() [1/2]

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

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

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

◆ column() [2/2]

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

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

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

◆ operator=() [3/3]

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

代入演算子の多重定義

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

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