容器概念(Container Concepts)

向量(Vector)

說明

一個向量(Vector)描述密集向量(dense),壓縮向量( packed)和稀疏向量(sparse)的共通方面(common aspects)。

優化(Refinement of)

缺省構造(DefaultConstructible), 向量表達式(Vector Expression) [1]

相關類型

作為對於向量表達式(Vector Expression)所定義類型的補充。

公有(Public base) vector_container<V> V 必須派生自這個公有基類。
Storage array V::array_type 僅針對於密集向量(Dense Vector)。內部的存儲數組(storage array)類型用於存儲元素。array_type必須是 存儲(Storage) 概念模型(concept model)。

記法(Notation)

V 一個向量模型的類型。
v V類型的對象。
n, i 可以轉化為size_type類型的對象。
t 可以轉化為value_type類型的對象。
p 可以轉化為bool類型的對象。

定義

合法表達式

除了在缺省構造(DefaultConstructible), 向量表達式(Vector Expression) 中定義的表達式,下面的表達式應當是合法的。

名稱 表達式 類型要求 返回值類型
帶有向量大小參數的構造函數(Sizing constructor) V v (n)   V
插入 v.insert_element (i, t) v 是可變化的(mutable)。 void
刪除 v.erase_element (i) v 是可變化的(mutable)。 void
清除 v.clear () v 是可變化的(mutable)。 void
改變大小 v.resize (n)
v.resize (n, p)
v is mutable. void
存儲(Storage) v.data() v is mutable and Dense. array_type& if a is mutable, const array_type& otherwise

表達式語義(Expression semantics)

僅當一個表達式的語義不同於或沒有在向量表達式(Vector Expression) 中定義時才得以定義。

名稱 表達式 先決條件(Precondition) 語義 後置條件(Postcondition)
帶有向量大小參數的構造函數(Sizing constructor) V v (n) n >= 0 構造一個n個元素的向量。 v.size () == n.
元素訪問 [2] v[n] 0<n>v.size() 返回 v 中的第 n 個元素  
插入 v.insert_element (i, t) 0 <= i < v.size (). t插入到v (i)。 向量的存儲空間可能需要增加。 v (i) 等於 t
刪除 v.erase_element (i) 0 <= i < v.size () 銷毀(Destroys)元素v (i) 並使用缺省值 value_type ()代替。 向量的存儲空間可能會減少。 v (i) 等於 value_type ()
清除 v.clear ()   等價於
for (i = 0; i < v.size (); ++ i)
  v.erase_element (i);
 
改變大小 v.resize (n)
v.resize (n, p)
  重新分配一個包含n 個元素的向量。
刪除或附加元素,使得向量的大小為要求的大小。附加的元素為value_type()的拷貝。
p == false 時,那麼,已經存在的元素將不會保留並且元素不會像通常情況那樣被附加(appended)。 反之,向量的狀態與使用等價的帶有向量大小的參數的構造函數之後的狀態一樣。
v.size () == n.
Storage v.data() 返回內部的密集存儲(dense storage)的引用。  

複雜度保證(Complexity guarantees)

帶有向量大小參數的構造函數的運行時複雜度(run-time complexity)是依賴於向量大小的線性複雜度。

insert_element 和 erase_element 對於特定於向量模型( Vector model )且運行時複雜度(run-time complexity)依賴於存儲空間的增加/減少。

改變大小( resize )的運行時複雜度(run-time complexity)是依賴於向量大小的線性複雜度。

不變量(Invariants)

模型(Models)

注意

[1] 作為一個用戶,你不需要關心Vector 是VectorExpression的一個優化。Vector是VectorExpression 的優化只是對於模板表達式引擎(template-expression engine)而不是對用戶很重要。

[2] 添加運算operator[] 純粹是為了方便和與std::vector的兼容。在 uBLAS 庫中,通常使用operator() ,因為這個運算符可以用於向量和矩陣。

矩陣(Matrix)

說明

一個矩陣定義了密集矩陣(dense),壓縮矩陣(packed),和稀疏矩陣(sparse)的共通方面( common aspects )。

優化(Refinement of)

缺省構造(DefaultConstructible), 矩陣表達式(Matrix Expression) [1]

相關類型

作為對矩陣表達式(Matrix Expression)所定義類型的補充。

公有基類 matrix_container<M> M 必須從這個公有基類派生。
存儲數組(Storage array) M::array_type 僅針對於密集矩陣(Dense Matrix)。內部的存儲數組用於存儲元素。array_type必須是 存儲(Storage)概念模型(concept model)。

記法(Notation)

M 矩陣模型的類型。
m M類型的對象。
n1, n2, i, j 可以轉化為size_type類型的對象。
t 可以轉化為value_type類型的對象。
p 可以轉化為bool類型的對象。

定義

合法表達式

除了在矩陣表達式(Matrix Expression) 中定義的表達式,下面的表達式應當是合法的。

名稱 表達式 類型要求 返回值類型
帶有矩陣大小參數的構造函數(Sizing constructor) M m (n1, n2)   M
插入 m.insert_element (i, j, t) m 是可變的(mutable)。 void
刪除 m.erase_element (i, j) m 是可變的(mutable)。 void
清除 m.clear () m 是可變的(mutable)。 void
改變大小 m.resize (n1, n2)
m.resize (n1, n2, p)
m 是可變的(mutable)。 void
存儲(Storage) m.data() m 是可變的(mutable)且是密集的(Dense)。 如果是可變的,就是array_type&, 否則是const array_type&

表達式語義(Expression semantics)

僅當一個表達式的語義不同於或沒有在 矩陣表達式(Matrix Expression) 中定義時才得以定義。

名稱 表達式 先決條件(Precondition) 語義 後置條件(Postcondition)
帶有矩陣大小參數的構造函數(Sizing constructor) M m (n1, n2) n1 >= 0 and n2 >= 0 構造一個n1n2列的矩陣。 m.size1 () == n1 and m.size2 () == n2
插入 m.insert_element (i, j, t) 0 <= i < m.size1 (),
0 <= j < m.size2 ().
將一個元素t插入到m (i, j)。 矩陣的存儲空間可能會增長。 m (i, j) 等於 t
刪除 m.erase_element (i, j) 0 <= i < m.size1 ()and
0 <= j < m.size2
銷毀元素m (i, j)並使用缺省值 value_type ()取代。 矩陣的存儲空間可能會減少。 m (i, j) 等於 value_type ()
清除 m.clear ()   等價於
for (i = 0; i < m.size1 (); ++ i)
  for (j = 0; j < m.size2 (); ++ j)
    m.erase_element (i, j);
 
改變大小 m.resize (n1, n2)
m.resize (n1, n2, p)
  重新分配一個n1n2列的矩陣。
刪除或附加元素,使得矩陣的大小為要求的大小。附加的元素是value_type() 的拷貝。
p == false時,那麼已經存在的元素將不被保留且元素不會被附加。 反之,這個矩陣的狀態與使用一個相同的大小參數來構造的矩陣狀態是一樣的。
m.size1 () == n1 and m.size2 () == n2
存儲(Storage) m.data() 返回內部的密集存儲(dense storage)的引用。  

複雜度保證(Complexity guarantees)

帶有向量大小參數的構造函數的運行時複雜度(run-time complexity)是依賴於矩陣大小的二次方複雜度。

insert_element 和 erase_element 對於特定於矩陣模型( Matrix model )且運行時複雜度(run-time complexity)依賴於存儲空間的增加/減少。

改變大小( resize )的運行時複雜度(run-time complexity)是依賴於矩陣大小的二次方複雜度。

不變量(Invariants)

模型(Models)

注意

[1] 作為一個用戶,你不需要關心Matrix 是MatrixExpression的一個優化。Matrix是MatrixExpression 的優化只是對於模板表達式引擎(template-expression engine)而不是對用戶很重要。


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 ).