表達式概念(表達式 Concepts)

標量表達式(Scalar 表達式)

說明

一個標量表達式是一個可以轉換為標量的表達式。

優化(Refinement of)

缺省構造。

相關類型

公有基類 scaler_expression<S> S 必須繼承自這個公有基類。
值類型 value_type 標量表達式的類型。

記法(Notation)

S 標量表達式模型的類型

定義

合法表達式(Valid expressions)

除了在缺省構造中定義的表達式之外,下面的表達式必須是合法的。

名稱 表達式 類型要求 返回值類型
運算 operator value_type () const   value_type

表達式語義(表達式 semantics)

一個表達式的語義僅當沒有在缺省構造中定義的時候才得以定義。

名稱 表達式 先決條件 語義 後置條件
運算 operator value_type () const     計算標量表達式  

複雜度保證(Complexity guarantees)

求值的運行時複雜度對於所計算的標量表達式是特定的(specific)。

不變量(Invariants)

模型(Models)

向量表達式(Vector 表達式)

描述

一個向量表達式是一個可以作為向量來計算的表達式。提供一個索引雙向迭代器(Indexed Bidirectional Iterator) 或一個 索引隨機訪問迭代器(Indexed Random Access Iterator)

優化(Refinement of)

缺省構造

相關類型

公有基類 vector_expression<V> V 必須從這個公有基類型繼承。
值類型 value_type 向量表達式的元素類型。
引用類型 reference 當訪問一個向量表達式的元素時返回值的類型。
可以轉化為value_type類型。
常引用類型 const_reference 當訪問一個常向量表達式(const vector expression)的元素時的返回值類型。
可以轉化為value_type類型。
大小類型 size_type 向量表達式的索引類型。一個無符號整型用於表示大小和索引值。
可以表達任何的difference_type類型的非負值。
距離類型 difference_type 一個有符號整型用於表示兩個向量表達式迭代器之間的距離。
常迭代器類型 const_iterator 一種用於檢查向量表達式元素的類型。
迭代器類型 iterator 一種可以用於修改向量表達式元素的類型。
常量反向迭代器類型  const_reverse_iterator 一個反向迭代器適配器(Reverse Iterator adaptor),它的基迭代器類型(base iterator type)是向量表達式的常量迭代器類型。
反向迭代器類型 reverse_iterator 一個反向迭代器適配器(Reverse Iterator adaptor),它的基迭代器類型(base iterator type)是向量表達式的迭代器類型。

記法(Notation)

V 向量表達式模型的類型
v, v1, v2 V類型的對象
i 可以轉化為size_type類型的對象
t 可以轉化為value_type類型的對象

定義

合法表達式(Valid expressions)

除了在缺省構造中定義的表達式之外,下面的表達式必須是合法的。

名稱 表達式 類型要求 返回值類型
範圍開始 v.begin ()   const_iterator
v.begin () v是可改變的(mutable)。 iterator
範圍終止 v.end ()   const_iterator
v.end () v是可改變的(mutable)。 iterator
大小 v.size ()   size_type
交換 v1.swap (v2) v1v2 是可改變的(mutable)。 void
反向範圍(reverse range)開始 v.rbegin ()   const_reverse_iterator
v.rbegin () v是可改變的(mutable)。 reverse_iterator
反向範圍(reverse range)終止 v.rend ()   const_reverse_iterator
v.rend () v是可改變的(mutable)。 reverse_iterator
元素訪問 v (i) i 可以轉化為size_type類型。 可以轉化為value_type類型。
賦值 v2 = v1 v2是可改變的(mutable)且v1可以轉化為 V類型。 V &
v2.assign (v1) v2是可改變的(mutable)且v1可以轉化為 V類型。 V &
運算賦值(Computed assignment) v2 += v1 v2是可改變的(mutable)且v1可以轉化為 V類型。 V &
v2.plus_assign (v1) v2是可改變的(mutable)且v1可以轉化為 V類型。 V &
v2 -= v1 v2>是可改變的(mutable)且v1可以轉化為 V類型。 V &
v2.minus_assign (v1) v2>是可改變的(mutable)且v1可以轉化為 V類型。 V &
v *= t v>是可改變的(mutable)且t可以轉化為 value_type類型。 V &

表達式語義

一個表達式的語義僅當沒有在缺省構造中定義的時候才得以定義。

名稱 表達式 先決條件 語義 後置條件
範圍開始 v.begin ()   返回指向向量表達式中的第一個元素的迭代器 v.begin ()是可解引用的(dereferenceable)或 past-the-end。 當且公當 v.size () == 0 時,v.begin()是past-the-end。
範圍終止 v.end ()   返回指向向量表達式最後一個元素的下一個位置(one past the last element)的迭代器 v.end () is past-the-end.
大小 v.size ()   返回向量表達式的大小,也就是,它的元素的個數。 v.size () >= 0
交換 v1.swap (v2)   等價於swap (v1, v2)  
反向範圍(reverse range)開始 v.rbegin ()   等價於 reverse_iterator (v.end ()) v.rbegin () 是可解引用的,或是 past-the-end。當且僅當v.size () ==0時,v.rbegin ()是past-the-end 。
反向範圍(reverse range)終止 v.rend ()   等價於reverse_iterator (v.begin ()) v.rend ()是 past-the-end。
元素訪問 v (i) 0 <= i < v.size () 返回向量表達式的第i-th 個元素。  
賦值 v2 = v1 v1.size () == v2.size () 將向量表達式 v1的每個元素賦給向量表達式v2 的對應元素。  
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 () 從向量表達式v2的每個元素中減去被求值的向量表達式v1的對應的元素。  
v2.minus_assign (v1) v1.size () == v2.size () 從向量表達式v2的每個元素中減去被求值的向量表達式v1的對應的元素。  
v *= t   將向量表達式v中的每個元素乘以t  

複雜度保證(Complexity guarantees)

對於被計算的向量表達式,函數begin ()end () 的運行時複雜度( run-time complexity)是特定的,典型情況是攤還常量時間。

函數size () 的運行時複雜度(run-time complexity)是常量時間(constant time)。

對於被計算的向量表達式,函數swap ()的運行時複雜度( run-time complexity)是特定的,典型情況是常量時間。

對於被計算的向量表達式,函數rbegin () and rend ()的運行時複雜度( run-time complexity)是特定的,典型情況是攤還常量時間。

對於被計算的向量表達式,元素訪問的運行時複雜度(run-time complexity)是特定的,典型情況下,對於密集(dense)向量是攤還常量時間(amortized constant time),對於稀疏(sparse)向量是對數時間(logarithmic)。

對於被計算的向量表達式,算術運算的運行時複雜度(run-time complexity)是特定的,典型情況下, 是關於表達式大小的線性時間。

不變量(Invariants)

合法範圍 對於任何的向量表達式v, [v.begin (), v.end ()) 都是合法的範圍。
完整性(Computed assignment) 迭代整個[v.begin (), v.end ())的算法將會遍歷v的每個元素。
合法反向範圍(valid reverse range) [v.rbegin (), v.rend ())是一個合法的範圍。
等價範圍(Equivalence of ranges) v.begin ()v.end ()的距離與從v.rbegin ()v.rend ()的距離是一樣的。

模型(Models)

矩陣表達式

描述

一個矩陣表達式是一個可以作為矩陣計算的表達式。 矩陣表達式提供一個索引雙向列/行迭代器(Indexed Bidirectional Column/Row Iterator) 或一個索引隨機訪問列/行迭代器(Indexed Random Access Column/Row Iterator)

優化(Refinement of)

缺省構造。

相關類型

公有基類 matrix_expression<M> M 必須從這個公有基類型派生。
值類型 value_type 矩陣表達式的元素類型。
引用類型 reference 訪問矩陣表達式的元素時的返回值的類型。
可以轉化為value_type類型。
常引用類型 const_reference 訪問一個常量矩陣表達式(constant matrix expression)時的返回值類型。
可以轉化為value_type類型。
大小類型 size_type 向量表達式的索引類型。一個無符號整型用於大小和索引類型。
可以轉化為任何的difference_type類型的非負值。
距離類型 difference_type 一個有符號的整型用於表示兩個矩陣表達式迭代器之間的距離。
常量迭代器類型 const_iterator1 用於檢查一個矩陣表達式元素的列向量的類型。
const_iterator2 用於檢查一個矩陣表達式元素的行向量的類型。
迭代器類型 iterator1 可以用於修改一個矩陣表達式元素的列向量的類型。
iterator2 可以用於修改一個矩陣表達式元素的行向量的類型。
常量反向迭代器類型 const_reverse_iterator1 一個反向迭代器適配器(Reverse Iterator adaptor),它的基迭代器類型(base iterator type)是矩陣表達式的 常量列向量迭代器類型(const column iterator type)。
const_reverse_iterator2 一個反向迭代器適配器(Reverse Iterator adaptor),它的基迭代器類型(base iterator type)是矩陣表達式的 常量行向量迭代器類型(const column iterator type)。
反向迭代器類型 reverse_iterator1 一個反向迭代器適配器(Reverse Iterator adaptor),它的基迭代器類型(base iterator type)是矩陣表達式的 列向量迭代器類型(const column iterator type)。
reverse_iterator2 一個反向迭代器適配器(Reverse Iterator adaptor),它的基迭代器類型(base iterator type)是矩陣表達式的 行向量迭代器類型(const column iterator type)。

記法(Notation)

M 矩陣表達式模型的類型
m, m1, m2 M類型的對象
i, j 可以轉化為size_type類型的對象
t 可以轉化為value_type類型的對象

定義

合法表達式(Valid expressions)

除了在缺省構造中定義的表達式之外,下面的表達式必須是合法的。

名稱 表達式 類型要求 返回值類型
範圍開始 m.begin1 ()   const_iterator1
m.begin2 ()   const_iterator2
m.begin1 () m是可改變的。  iterator1
m.begin2 () m是可改變的。 iterator2
範圍終止 m.end1 ()   const_iterator1
m.end2 ()   const_iterator2
m.end1 () m是可改變的。  iterator1
m.end2 () m是可改變的。 iterator2
大小 m.size1 ()   size_type
m.size2 ()   size_type
交換 m1.swap (m2) m1 and m2 are mutable.  void
反向範圍(reverse range)開始 m.rbegin1 ()   const_reverse_iterator1
m.rbegin2 ()   const_reverse_iterator2
m.rbegin1 () m是可改變的。  reverse_iterator1
m.rbegin2 () m是可改變的。 reverse_iterator2
反向範圍(reverse range)終止 m.rend1 ()   const_reverse_iterator1
m.rend2 ()   const_reverse_iterator2
m.rend1 () m是可改變的。 reverse_iterator1
m.rend2 () m是可改變的。 reverse_iterator2
元素訪問 m (i, j) ij可以轉化為 size_type類型。 可以轉化為value_type類型。
賦值 m2 = m1 m2是可改變的(mutable)且m1可以轉化為 M類型。 M &
m2.assign (m1) m2是可改變的(mutable)且m1可以轉化為 M類型。 M &
運算賦值(Computed assignment) m2 += m1 m2是可改變的(mutable)且m1可以轉化為 M類型。 M &
m2.plus_assign (m1) m2是可改變的(mutable)且m1可以轉化為 M類型。 M &
m2 -= m1 m2 is mutable and m1可以轉化為 M類型。 M &
m2.minus_assign (m1) m2是可改變的(mutable)且m1可以轉化為 M類型。 M &
m *= t m是可改變的(mutable)且t可以轉化為 value_type類型。 M &

表達式語義(表達式 semantics)

一個表達式的語義僅當沒有在缺省構造中定義的時候才得以定義。

名稱 表達式 先決條件 語義 後置條件
範圍開始 m.begin1 ()   返回指向矩陣表達式的第一列的第一個元素的迭代器 。 m.begin1 ()是可解引用的(dereferenceable)或 past-the-end。當且僅當 m.size1 () ==past-the-end if and only if m.size1 () == 0時, m.begin1 ()是past-the-end。
m.begin2 ()   返回指向矩陣表達式的第一列的第一個元素的迭代器 。 m.begin2 ()是可解引用的(dereferenceable)或 past-the-end。當且僅當 m.size2 () == 0時, m.begin2 ()是past-the-end。
範圍終止 m.end1 ()   返回指向矩陣表達式的最後一個元素之外的一個元素(one past the last element)的迭代器。 m.end1 ()是 past-the-end。
m.end2 ()   返回指向矩陣表達式的最後一個元素之外的一個元素(one past the last element)的迭代器。 m.end2 ()是 past-the-end。
大小 m.size1 ()   返回向量表達式的行數。 m.size1 () >= 0
m.size2 ()   返回矩陣表達式的列數。 m.size2 () >= 0
交換 m1.swap (m2)   等價於swap (m1, m2)  
反向範圍(reverse range)開始 m.rbegin1 ()   等價於reverse_iterator1 (m.end1 ()) m.rbegin1 ()是可解引用的(dereferenceable)或 past-the-end。當且僅當m.size1 () == 0時,m.rbegin1 ()是past-the-end。
m.rbegin2 ()   等價於reverse_iterator2 (m.end2 ()) m.rbegin2 ()是可解引用的(dereferenceable)或 past-the-end。當且僅當m.size2 () == 0時,m.rbegin2 ()是past-the-end。
反向範圍(reverse range)終止 m.rend1 ()   等價於reverse_iterator1 (m.begin1 ()) m.rend1 ()是 past-the-end。
m.rend2 ()   等價於reverse_iterator2 (m.begin2 ()) m.rend2 ()是 past-the-end。
元素訪問 m (i, j) 0 <= i < m.size1 ()0 <= j < m.size2 () 返回矩陣表達式中第 i-th行第j-th 個元素。  
賦值 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 ()
從矩陣表達式 m2中的每個元素中減去矩陣表達式m1 中的對應元素。  
m2.minus_assign (m1) m1.size1 () == m2.size1 ()
m1.size2 () == m2.size2 ()
從矩陣表達式 m2中的每個元素中減去矩陣表達式m1 中的對應元素。  
m *= t   將矩陣表達式m中的每個元素乘以t  

複雜度保證(Complexity guarantees)

對於被計算的矩陣表達式,函數begin1 (), begin2 () , end1 ()end2 () 的運行時複雜度( run-time complexity)是特定的。

對於被計算的矩陣表達式,函數size1 () and size2 () 的運行時複雜度( run-time complexity)是常量。

對於被計算的矩陣表達式,函數swap () 的運行時複雜度( run-time complexity)是特定的,典型情況是常量時間。

對於被計算的矩陣表達式,函數rbegin1 (), rbegin2 () , rend1 ()rend2 () 的運行時複雜度( run-time complexity)是特定的。

對於被計算的矩陣表達式,元素訪問的運行時複雜度(run-time complexity)是特定的,典型情況下,對於密集(dense)矩陣是攤還常量時間(amortized constant time),對於稀疏(sparse)矩陣是對數時間(logarithmic)。

對於被計算的向量表達式,算術運算的運行時複雜度(run-time complexity)是特定的,典型情況下, 是關於代理(proxies)大小的平方時間。

不變量(Invariants)

合法範圍 對於任何的矩陣類型m, [m.begin1 (), m.end1 ())[m.begin2 (), m.end2 ()) 都是合法的區間。
完整性(Computed assignment) 一個迭代整個[m.begin1 (), m.end1 ())區間的算法將會遍歷m的每一行 , 一個迭代整個[m.begin2 (), m.end2 ())區間的元將會遍歷整個m的每一行。
合法反向範圍(valid reverse range) [m.rbegin1 (), m.rend1 ())[m.rbegin2 (), m.rend2 ()) 都是合法範圍。
等價範圍(Equivalence of ranges) m.begin1 ()m.end1 () 的距離與從m.rbegin1 ()m.rend1 ()的距離是一樣的,且從 m.begin2 ()m.end2 ()的距離與 從m.rbegin2 ()m.rend2 ()的距離是一樣的。

模型(Models)


Copyright (©) 2000-2002 Joerg Walter, Mathias Koch
Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt ).