向量描述了稠密、 packed 和稀疏向量的共同方面。
DefaultConstructible, 向量表达式 [1]。
除了 向量表达式 定义的类型之外
公共基类 | vector_container<V> | V 必须从此公共基类派生。 |
存储数组 | V::array_type | 仅限稠密向量。用于存储元素的基础存储数组的类型。 array_type 必须建模 存储 概念。 |
V |
作为向量模型的类型 |
v |
V 类型的对象 |
n, i |
可转换为 size_type 类型的对象 |
t |
可转换为 value_type 类型的对象 |
p |
可转换为 bool 类型的对象 |
除了 DefaultConstructible, 向量表达式 中定义的表达式之外,以下表达式也必须有效。
名称 | 表达式 | 类型要求 | 返回类型 |
---|---|---|---|
尺寸构造函数 | V v (n) |
V |
|
插入 | v.insert_element (i, t) |
v 是可变的。 |
void |
擦除 | v.erase_element (i) |
v 是可变的。 |
void |
清除 | v.clear () |
v 是可变的。 |
void |
调整大小 | v.resize (n) v.resize (n, p) |
v 是可变的。 |
void |
存储 | v.data() |
v 是可变的且稠密的。 |
如果 v 是可变的,则为 array_type& ,否则为 const array_type& |
表达式的语义仅在与 向量表达式 中定义的语义不同或未定义时才定义。
名称 | 表达式 | 先决条件 | 语义 | 后置条件 |
---|---|---|---|---|
尺寸构造函数 | 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 () . |
在 v (i) 处插入一个值为 t 的元素。向量的存储需求可能会增加。 |
v (i) 等于 t 。 |
擦除 | v.erase_element (i) |
0 <= i < v.size () |
销毁 v (i) 处的元素,并将其替换为默认的 value_type () 。向量的存储需求可能会减少。 |
v (i) 等于 value_type () 。 |
清除 | v.clear () |
等效于for (i = 0; i < v.size (); ++ i) v.erase_element (i); |
||
调整大小 | v.resize (n) |
重新分配向量,使其可以容纳 n 个元素。擦除或附加元素以使向量达到规定的尺寸。附加的元素是 value_type() 的副本。当 p == false 时,现有元素不会被保留,并且元素不会像正常情况下那样附加。相反,向量的状态与等效尺寸构造函数后的状态相同。 |
v.size () == n . |
|
存储 | v.data() |
返回对底层稠密存储的引用。 |
尺寸构造函数的运行时复杂度与向量的大小呈线性关系。
insert_element 和 erase_element 的运行时复杂度对于向量模型是特定的,并且取决于存储需求的增加/减少。
resize 的运行时复杂度与向量的大小呈线性关系。
vector
, bounded_vector
, c_vector
unit_vector
, zero_vector
, scalar_vector
mapped_vector;
, compressed_vector
, coordinate_vector
[1] 作为用户,您无需关心向量是向量表达式的精化。作为向量表达式的精化仅对模板表达式引擎重要,对用户不重要。
[2] 添加 operator[]
纯粹是为了方便和与 std::vector
的兼容性。然而,在 uBLAS 中,通常使用 operator()
进行索引,因为这可以用于向量和矩阵。
矩阵描述了稠密、 packed 和稀疏矩阵的共同方面。
DefaultConstructible, 矩阵表达式 [1] 。
除了 矩阵表达式 定义的类型之外
公共基类 | matrix_container<M> | M 必须从此公共基类派生。 |
存储数组 | M::array_type | 仅限稠密矩阵。用于存储元素的基础存储数组的类型。 array_type 必须建模 存储 概念。 |
M |
作为矩阵模型的类型 |
m |
M 类型的对象 |
n1, n2, i, j |
可转换为 size_type 类型的对象 |
t |
可转换为 value_type 类型的对象 |
p |
可转换为 bool 类型的对象 |
除了 矩阵表达式 中定义的表达式之外,以下表达式也必须有效。
名称 | 表达式 | 类型要求 | 返回类型 |
---|---|---|---|
尺寸构造函数 | M m (n1, n2) |
M |
|
插入 | m.insert_element (i, j, t) |
m 是可变的。 |
void |
擦除 | m.erase_element (i, j) |
m 是可变的。 |
void |
清除 | m.clear () |
m 是可变的。 |
void |
调整大小 | m.resize (n1, n2) m.resize (n1, n2, p) |
m 是可变的。 |
void |
存储 | m.data() |
m 是可变的且稠密的。 |
如果 m 是可变的,则为 array_type& ,否则为 const array_type& |
表达式的语义仅在与 矩阵表达式 中定义的语义不同或未定义时才定义。
名称 | 表达式 | 先决条件 | 语义 | 后置条件 |
---|---|---|---|---|
尺寸构造函数 | M m (n1, n2) |
n1 >= 0 和 n2 >= 0 |
分配一个包含 n1 行和 n2 列的矩阵。 |
m.size1 () == n1 和 m.size2 () == n2 。 |
插入 | m.insert_element (i, j, t) |
0 <= i < m.size1 () ,0 <= j < m.size2 () . |
在 m (i, j) 处插入一个值为 t 的元素。矩阵的存储需求可能会增加。 |
m (i, j) 等于 t 。 |
擦除 | m.erase_element (i, j) |
0 <= i < m.size1 () 和
|
销毁 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) |
重新分配矩阵,使其可以容纳 n1 行和 n2 列。擦除或附加元素以使矩阵达到规定的尺寸。附加的元素是 value_type() 副本。当 p == false 时,现有元素不会被保留,并且元素不会像正常情况下那样附加。相反,矩阵的状态与等效尺寸构造函数后的状态相同。 |
m.size1 () == n1 和 m.size2 () == n2 。 |
|
存储 | m.data() |
返回对底层稠密存储的引用。 |
尺寸构造函数的运行时复杂度与矩阵的大小呈二次关系。
insert_element 和 erase_element 的运行时复杂度对于矩阵模型是特定的,并且取决于存储需求的增加/减少。
resize 的运行时复杂度与矩阵的大小呈二次关系。
matrix
, bounded_matrix
, c_matrix
identity_matrix
, zero_matrix
, scalar_matrix
triangular_matrix
, symmetric_matrix
, banded_matrix
mapped_matrix
, compressed_matrix
, coordinate_matrix
[1] 作为用户,您无需关心矩阵是矩阵表达式的精化。作为矩阵表达式的精化仅对模板表达式引擎重要,对用户不重要。
张量描述了稠密多维数组的共同方面。
DefaultConstructible, 张量表达式 [1] 。
除了 张量表达式 定义的类型之外
公共基类 | tensor_container<tensor_t> |
tensor_t 必须从此公共基类派生。 |
存储数组 | tensor_t::array_type |
仅限稠密张量。用于存储元素的基础存储数组的类型。 array_type 必须建模 存储 概念。 |
tensor_t |
作为张量模型的类型 |
t |
tensor_t 类型的对象 |
n1, n2, np, m1, m2, mq |
可转换为 size_type 类型的维度对象 |
i1, i2, ip, j, k |
可转换为 size_type 类型的索引对象 |
v |
可转换为 value_type 类型的对象 |
除了 张量表达式 中定义的表达式之外,以下表达式也必须有效。
名称 | 表达式 | 类型要求 | 返回类型 |
---|---|---|---|
尺寸构造函数 | T t(n1, n2, ..., np) |
T |
|
写入 | t.at(i1, i2, ..., ip) |
t 是可变的。 |
void |
读取 | t.at(i1, i2, ..., ip) |
t 是可变的。 |
v |
清除 | t.clear () |
t 是可变的。 |
void |
调整大小 | t.resize(m1, m2, ... , mq) |
t 是可变的。 |
void |
存储 | t.data() |
t 是可变的且稠密的。 |
如果 t 是可变的,则为 pointer ,否则为 const_pointer |
表达式的语义仅在与 张量表达式 中定义的语义不同或未定义时才定义。
名称 | 表达式 | 先决条件 | 语义 | 后置条件 |
---|---|---|---|---|
尺寸构造函数 | T t(n1, n2, ..., np) |
$n_r \geq 1$ for $1\leq 1 \leq p $ | 分配一个 p 阶张量,其维度范围为 $n_1,n_2,\dots,n_p$。 |
t.size(r)==nr for $1\leq r \leq p$。 |
写入 | t.at(i1,i2,...,ip)=v |
$0 \leq i_r < n_r$ for $1 \leq r \leq p$。 | 在多索引位置 $i_1,i_2,\dots,i_p$ 写入一个值为 v 的元素。 |
t(i1,i2,...,ip) 等于 v 。 |
读取 | v=t.at(i1,i2,...,ip) |
$0 \leq i_r < n_r$ for $1 \leq r \leq p$。 | 读取多索引位置 $(i_1,i2_,\dots,i_p)$ 处的元素,并返回一个值 v 。 |
t(i1,i2,...,ip) 等于 v 。 |
清除 | t.clear() |
从容器中移除所有元素。 | ||
调整大小 | t.resize(m1, m2, ..., mq) |
$m_r \geq 1$ for $1\leq 1 \leq q $ | 重新分配矩阵,使其可以容纳 $m_1\times m_2\times \cdots \times m_q$ 个元素。 擦除或附加元素以使矩阵达到规定的尺寸。附加的元素是 value_type() 副本。 |
t.size(r) == mr for $1\leq r \leq q$。 |
存储 | m.data() |
返回对底层稠密存储的引用。 |
构造函数的运行时复杂度与张量的大小 $n_1 \times n_2 \times \cdots \times n_p$ 呈线性关系。
write()
和 read()
的运行时复杂度与张量的阶数呈线性关系。
resize 的运行时复杂度最多与张量的大小 $m_1 \times m_2 \times \cdots \times n_q$ 呈线性关系。
tensor
[1] 作为用户,您无需关心张量是张量表达式的精化。作为张量表达式的精化仅对模板表达式引擎重要,对用户不重要。
版权 (©) 2000-2002 Joerg Walter, Mathias Koch
版权 (©) 2018 Cem Bassoy
使用、修改和分发受 Boost 软件许可 1.0 版的约束。(请参阅随附文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)。