c++boost.gif Expression Concepts

Scalar Expression

Description

スカラー式はスカラー型に変換可能な式である。

Refinement of

Default Constructible

Associated types

Value type value_type スカラー式の型

Notation

S スカラー式のモデルとなる型

Definitions

Valid expressions

Default Constructible で定義される式の他に、次の式が有効でなければならない。

Name Expression Type requirements Return type
Evaluation operator value_type () const   value_type

Expression semantics

式の意味は、Default Constructible で定義されているものと異なる、または定義されていない時のみ、 定義される。

Name Expression Precondition Semantics Postcondition
Evaluation operator value_type () const   スカラー式を評価する。  

Complexity guarantees

実行時の評価の計算量は、評価されるスカラー式により異なる。

Invariants

Models

Vector Expression

Description

ベクトル式はベクトルに評価されることが可能な式である。 ベクトル式は Indexed Bidirectional IteratorIndexed Random Access Iterator を提供する。

Refinement of

Default Constructible.

Associated types

Value type value_type ベクトル式の型
Const iterator type const_iterator ベクトル式の要素を調べるのに使われるイテレータの型
Iterator type iterator ベクトル式の要素を変更するのに使われるイテレータの型
Distance type difference_type 二つのベクトル式のイテレータの距離を表す符号付き整数
Size type size_type ベクトル式の距離の非負の型を表すことができる符号なし整数
Const reverse iterator type const_reverse_iterator 基本イテレータ型がベクトル式の定数イテレータ型である逆行イテレータアダプタ
Reverse iterator type reverse_iterator 基本イテレータ型がベクトル式のイテレータ型である逆行イテレータアダプタ

Notation

V ベクトル式のモデルである型
v, v1, v2 V のオブジェクト
i size_type に変換可能な型のオブジェクト
t value_type に変換可能な型のオブジェクト

Definitions

Valid expressions

Default Constructible で定義されている式に加え、次の式が有効でなければならない。

Name Expression Type requirements Return type
Beginning of range v.begin ()   const_iterator
v.begin () v は変更可能。 iterator
End of range v.end ()   const_iterator
v.end () v は変更可能。 iterator
Size v.size ()   size_type
Swap v1.swap (v2) v1v2 は変更可能。 void
Beginning of reverse range v.rbegin ()   const_reverse_iterator
v.rbegin () v は変更可能。 reverse_iterator
End of reverse range v.rend ()   const_reverse_iterator
v.rend () v は変更可能。 reverse_iterator
Element access v (i) isize_type に変更可能。 value_type に変換可能。
Assignment v2 = v1 v2 は変更可能で v1Vに変換可能。 V &
v2.assign (v1) v2 は変更可能で v1Vに変換可能。 V &
Computed assignment v2 += v1 v2 は変更可能で v1Vに変換可能。 V &
v2.plus_assign (v1) v2 は変更可能で v1Vに変換可能。 V &
v2 -= v1 v2 は変更可能で v1Vに変換可能。 V &
v2.minus_assign (v1) v2 は変更可能で v1Vに変換可能。 V &
v *= t v は変更可能で tVに変換可能。 V &

Expression semantics

式の意味は、Default Constructible で定義されているものと異なるか、定義されていない時のみ定義される。

v1 to the corresponding element of v2
Name Expression Precondition Semantics Postcondition
Beginning of range v.begin ()   ベクトル式の最初の要素を指すイテレータを返す。 v.begin () は参照外しが可能であるか最後の次を指す。 最後の次を指すのは、v.size () == 0 の時に、そしてその時のみである。
End of range v.end ()   ベクトル式の最後の次の要素を指すイテレータを返す。 v.end () は最後の次を指す。
Size v.size ()   ベクトル式の大きさ、つまり要素数を返す。 v.size () >= 0
Swap v1.swap (v2)   swap (v1, v2) と等価。  
Beginning of reverse range v.rbegin ()   reverse_iterator (v.end ()) と等価。 v.rbegin () は参照外しが可能であるか最後の次を指す。 最後の次を指すのは、v.size () == 0 の時に、そしてその時のみである。
End of reverse range v.rend ()   reverse_iterator (v.begin ()) と等価。 v.rend () は最後の次である。
Element access v (i) 0 <= i < v.size () ベクトル式の i 番目の要素を返す。  
Assignment v2 = v1 v1.size () == v2.size () 評価されたベクトル式 v1 の全ての要素を、 v2 の対応する要素に代入する。 v1v2に対応する要素をもつ。  
v2.assign (v1) v1.size () == v2.size () 評価されたベクトル式 v1 の全ての要素を、 v2 の対応する要素に代入する。  
Computed assignment v2 += v1 v1.size () == v2.size () 評価されたベクトル式 v1 の全ての要素を, v2 の対応する要素に足す.  
v2.plus_assign (v1) v1.size () == v2.size () 評価されたベクトル式 v1 の全ての要素を, v2 の対応する要素に足す.  
v2 -= v1 v1.size () == v2.size () 評価されたベクトル式 v1 の全ての要素を, v2 の対応する要素から引く.  
v2.minus_assign (v1) v1.size () == v2.size () 評価されたベクトル式 v1 の全ての要素を, v2 の対応する要素から引く.  
v *= t   vの全ての要素にtを掛ける.  

Complexity guarantees

begin () end () の実行時計算量は評価されるベクトル式 により異なるが,典型的には定数償却時間である.

size () の実行時計算量は定数時間である.

swap () の実行時計算量は評価されるベクトル式によって異なるが, 典型的には定数時間である.

rbegin ()rend ()の実行時計算量は評価されるベクトル式により異なるが, 典型的には定数償却時間である.

要素アクセスの実行時計算量は評価されるベクトル式により異なるが, 典型的には密行列なら定数償却時間,疎行列なら対数時間である.

算術演算の実行時計算量は評価されるベクトル式により異なるが, 典型的には式の大きさの線形時間である.

Invariants

有効範囲 あらゆるベクトル式vに対して,[v.begin(), v.end())が有効範囲である.
完全性 [v.begin(),v.end())の範囲を反復するアルゴリズムは,vの全ての要素を通る.
有効な逆順範囲 [v.rbegin (), v.rend() ) が有効範囲である.
範囲の等価性 v.begin()からv.end()のまで距離は, v.rbegin()からv.rend()までの距離と等しい.

Models

Matrix Expression

Description

行列式は行列に評価される式である.表列式は インデックス付き双方向の列/行イテレータ,または, インデックス付きランダム列/行イテレータを提供する.

Refinement of

デフォルトコンストラクト可能

Associated types

Value type value_type 行列式の型
Const iterator types const_iterator1 行列式の要素を調べるのに使われるであろう列イテレータの型.
const_iterator2 行列式の要素を調べるのに使われるであろう行イテレータの型.
Iterator types iterator1 行列式の要素を変更するのに使われるであろう列イテレータの型.
iterator2 行列式の要素を変更するのに使われるであろう行イテレータの型.
Distance type difference_type 行列式の2つのイテレータ間の距離を表す符号付き整数型
Size type size_type 行列式の距離型の非負値を表す符号無し整数型
Const reverse iterator types const_reverse_iterator1 その行列式のconstな列イテレータ型を基底型とする逆順イテレータアダプタ
const_reverse_iterator2 その行列式のconstな行イテレータ型を基底型とする逆順イテレータアダプタ
Reverse iterator types reverse_iterator1 その行列式の列イテレータ型を基底型とする逆順イテレータアダプタ
reverse_iterator2 その行列式の行イテレータ型を基底型とする逆順イテレータアダプタ

Notation

M 行列式のモデルである型
m, m1, m2 M型のオブジェクト
i, j size_type型と変換可能な型のオブジェクト
t value_type型と変換可能な型のオブジェクト

Definitions

Valid expressions

デフォルトコンストラクト可能で定義される式に加え,以下の式が有効である.

Name Expression Type requirements Return type
Beginning of range m.begin1 ()   const_iterator1
m.begin2 ()   const_iterator2
m.begin1 () m は変更可能。  iterator1
m.begin2 () m は変更可能。 iterator2
End of range m.end1 ()   const_iterator1
m.end2 ()   const_iterator2
m.end1 () m は変更可能。  iterator1
m.end2 () m は変更可能。 iterator2
Size m.size1 ()   size_type
m.size2 ()   size_type
Swap m1.swap (m2) m1m2は変更可能。  void
Beginning of reverse range m.rbegin1 ()   const_reverse_iterator1
m.rbegin2 ()   const_reverse_iterator2
m.rbegin1 () m は変更可能。  reverse_iterator1
m.rbegin2 () m は変更可能。 reverse_iterator2
End of reverse range m.rend1 ()   const_reverse_iterator1
m.rend2 ()   const_reverse_iterator2
m.rend1 () m は変更可能。 reverse_iterator1
m.rend2 () m は変更可能。 reverse_iterator2
Element access m (i, j) ijsize_typeに変換可能. Convertible to value_type.
Assignment m2 = m1 m2 は変更可能で m1Mに変換可能。 M &
m2.assign (m1) m2 は変更可能で m1Mに変換可能。 M &
Computed assignment m2 += m1 m2 は変更可能で m1Mに変換可能。 M &
m2.plus_assign (m1) m2 は変更可能で m1Mに変換可能。 M &
m2 -= m1 m2 は変更可能で m1Mに変換可能。 M &
m2.minus_assign (m1) m2 は変更可能で m1Mに変換可能。 M &
m *= t m は変更可能で tMに変換可能。 M &

Expression semantics

式の意味は、Default Constructible で定義されているものと異なるか、定義されていない時のみ定義される。

Name Expression Precondition Semantics Postcondition
Beginning of range m.begin1 ()   行列式の第一列の最初の要素を指すイテレータを返す. m.begin1() は参照はがし可能か,最後の次である. m.size()==0の場合のみ最後の次である.
m.begin2 ()   行列式の第一行の最初の要素を指すイテレータを返す. m.begin2() は参照はがし可能か,最後の次である. m.size()==0の場合のみ最後の次である.
End of range m.end1 ()   行列式の第一列の最後の次の要素を指すイテレータを返す. m.end1()は最後の次である.
m.end2 ()   行列式の第一列の最後の次の要素を指すイテレータを返す. m.end2()は最後の次である.
Size m.size1 ()   行列式の行数を返す. m.size1 () >= 0
m.size2 ()   行列式の列数を返す. m.size2 () >= 0
Swap m1.swap (m2)   swap(m1, m2) と等価.  
Beginning of reverse range m.rbegin1 ()   reverse_iterator1(m.end())と等価. m.rbegin1() は参照はがし可能か,最後の次である. m.size()==0の場合のみ最後の次である.
m.rbegin2 ()   reverse_iterator2(m.end())と等価. m.rbegin2() は参照はがし可能か,最後の次である. m.size()==0の場合のみ最後の次である.
End of reverse range m.rend1 ()   reverse_iterator1 (m.begin1 ())と等価 m.rend1()は最後の次である.
m.rend2 ()   reverse_iterator2 (m.begin2 ())と等価 m.rend2()は最後の次である.
Element access m (i, j) 0 <=i < m.size1 () かつ 0 <= j < m.size2 () 行列式のi番目の行のj番目の要素を返す.  
Assignment m2 = m1 m1.size1 () == m2.size1 () かつ
m1.size2 () == m2.size2 ()
評価された行列式m1の全ての要素をm2の対応する要素に代入する.  
m2.assign (m1) m1.size1 () == m2.size1 () かつ
m1.size2 () == m2.size2 ()
m1の全ての要素をm2の対応する要素に代入する.  
Computed assignment m2 += m1 m1.size1 () == m2.size1 () かつ
m1.size2 () == m2.size2 ()
評価された行列式m1の全ての要素をm2の対応する要素に加算する.  
m2.plus_assign (m1) m1.size1 () == m2.size1 () かつ
m1.size2 () == m2.size2 ()
評価された行列式m1の全ての要素をm2の対応する要素に加算する.  
m2 -= m1 m1.size1 () == m2.size1 () かつ
m1.size2 () == m2.size2 ()
評価された行列式m1の全ての要素をm2の対応する要素から減算する.  
m2.minus_assign (m1) m1.size1 () == m2.size1 () かつ
m1.size2 () == m2.size2 ()
評価された行列式m1の全ての要素をm2の対応する要素から減算する.  
m *= t   mの全ての要素にtを掛ける.  

Complexity guarantees

begin1()begin2()end1()end2() の実行時計算量は評価される行列式により異なる.

size1()size2()の実行時計算量は定数時間である.

swap()の実行時計算量は評価される行列式により異なるが, 典型的には定数時間である.

rbegin1 (), rbegin2 () , rend1 () ,rend2 () の実行時計算量は評価される行列式により異なる.

要素アクセスの実行時計算量は評価される行列式により異なるが, 典型的には密行列であれば定数償却時間,疎行列であれば対数時間である.

算術演算の実行時計算量は評価される行列式により異なるが, 典型的にはプロキシの大きさの二次式となる.

Invariants

有効範囲 あらゆる行列式mに対し,[m.begin1(), m.end1())[m.begin2(), m.end2())が有効範囲である.
完全性 [m.begin1(), m.end1())の範囲に対する反復アルゴリズムは, mの全ての行を通る. [m.begin2(), m.end2())の範囲に対する反復アルゴリズムは, mの全ての列を通る.
有効な逆順範囲 [m.rbegin1(), m.rend1())[m.rbegin2(), m.rend2()) が有効範囲である.
範囲の等価性 m.begin1()からm.end1()までの距離は, m.rbegin1()からm.rend1()までの距離と等しい. m.begin2()からm.end2()までの距離は, m.rbegin2()からm.rend2()までの距離と等しい.

Models


Copyright (©) 2000-2002 Joerg Walter, Mathias Koch
Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided ``as is'' without express or implied warranty, and with no claim as to its suitability for any purpose.

Last revised: 1/15/2003


Japanese Translation Copyright (C) 2003 Kohske Takahashi

オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の 複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」 に提供されており、いかなる明示的、暗黙的保証も行わない。また、 いかなる目的に対しても、その利用が適していることを関知しない。