Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

向量代理

向量范围

描述

模板类 vector_range<V> 允许寻址向量元素的子范围。

示例

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/vector_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    vector<double> v (3);
    vector_range<vector<double> > vr (v, range (0, 3));
    for (unsigned i = 0; i < vr.size (); ++ i)
        vr (i) = i;
    std::cout << vr << std::endl;
}

定义

定义于头文件 vector_proxy.hpp 中。

模板参数

参数 描述 默认值
V 引用的向量类型。

模型

向量表达式 .

如果指定的范围超出向量的索引范围,则 vector_range 不是一个良好形成的向量表达式。也就是说,访问向量索引范围之外的元素是未定义的

类型要求

无,除了 向量表达式 的要求所施加的那些。

公共基类

vector_expression<vector_range<V> >

成员

成员 描述
vector_range (vector_type &data, const range &r) 构造一个子向量。
size_type start () const 返回子向量的起始位置。
size_type size () const 返回子向量的大小。
const_reference operator () (size_type i) const 返回第 i 个元素的值。
reference operator () (size_type i) 返回第 i 个元素的引用。
const_reference operator [] (size_type i) const 返回第 i 个元素的值。
reference operator [] (size_type i) 返回第 i 个元素的引用。
vector_range &operator = (const vector_range &vr) 赋值运算符。
vector_range &assign_temporary (vector_range &vr) 赋值一个临时对象。可能会更改向量范围 vr
template<class AE>
vector_range &operator = (const vector_expression<AE> &ae)
扩展赋值运算符。
template<class AE>
vector_range &assign (const vector_expression<AE> &ae)
将向量表达式赋值给子向量。赋值的左侧和右侧应独立。
template<class AE>
vector_range &operator += (const vector_expression<AE> &ae)
计算赋值运算符。将向量表达式加到子向量上。
template<class AE>
vector_range &plus_assign (const vector_expression<AE> &ae)
将向量表达式加到子向量上。赋值的左侧和右侧应独立。
template<class AE>
vector_range &operator -= (const vector_expression<AE> &ae)
计算赋值运算符。从子向量中减去向量表达式。
template<class AE>
vector_range &minus_assign (const vector_expression<AE> &ae)
从子向量中减去向量表达式。赋值的左侧和右侧应独立。
template<class AT>
vector_range &operator *= (const AT &at)
计算赋值运算符。将子向量与标量相乘。
template<class AT>
vector_range &operator /= (const AT &at)
计算赋值运算符。将子向量除以标量。
void swap (vector_range &vr) 交换子向量的内容。
const_iterator begin () const 返回一个指向 vector_range 开头的 const_iterator
const_iterator end () const 返回一个指向 vector_range 结尾的 const_iterator
iterator begin () 返回一个指向 vector_range 开头的 iterator
iterator end () 返回一个指向 vector_range 结尾的 iterator
const_reverse_iterator rbegin () const 返回一个指向反向 vector_range 开头的 const_reverse_iterator
const_reverse_iterator rend () const 返回一个指向反向 vector_range 结尾的 const_reverse_iterator
reverse_iterator rbegin () 返回一个指向反向 vector_range 开头的 reverse_iterator
reverse_iterator rend () 返回一个指向反向 vector_range 结尾的 reverse_iterator

简单投影

描述

自由函数 subrange 支持构造向量范围。

原型


    template<class V>
    vector_range<V> subrange (V &data,
       V::size_type start, V::size_type stop);
    template<class V>
    const vector_range<const V> subrange (const V &data,
       V::size_type start, V::size_type stop);

通用投影

描述

自由函数 project 支持构造向量范围。现有的 matrix_range 可以与更远的范围组合。结果范围是使用现有范围的 compose 函数计算的。

原型


    template<class V>
    vector_range<V> project (V &data, const range &r);
    template<class V>
    const vector_range<const V> project (const V &data, const range &r);
    template<class V>
    vector_range<V> project (vector_range<V> &data, const range &r);
    template<class V>
    const vector_range<V> project (const vector_range<V> &data, const range &r);

定义

定义于头文件 vector_proxy.hpp 中。

类型要求

复杂度

线性复杂度取决于范围的大小。

示例

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/vector_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    vector<double> v (3);
    for (int i = 0; i < 3; ++ i)
        project (v, range (0, 3)) (i) = i;
    std::cout << project (v, range (0, 3)) << std::endl;
}

向量切片

描述

模板类 vector_slice<V> 允许寻址向量的切片。

示例

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/vector_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    vector<double> v (3);
    vector_slice<vector<double> > vs (v, slice (0, 1, 3));
    for (unsigned i = 0; i < vs.size (); ++ i)
        vs (i) = i;
    std::cout << vs << std::endl;
}

定义

定义于头文件 vector_proxy.hpp 中。

模板参数

参数 描述 默认值
V 引用的向量类型。

模型

向量表达式 .

如果指定的切片超出向量的索引范围,则 vector_slice 不是一个良好形成的向量表达式。也就是说,访问向量索引范围之外的元素是未定义的

类型要求

无,除了 向量表达式 的要求所施加的那些。

公共基类

vector_expression<vector_slice<V> >

成员

成员 描述
vector_slice (vector_type &data, const slice &s) 构造一个子向量。
size_type size () const 返回子向量的大小。
const_reference operator () (size_type i) const 返回第 i 个元素的值。
reference operator () (size_type i) 返回第 i 个元素的引用。
const_reference operator [] (size_type i) const 返回第 i 个元素的值。
reference operator [] (size_type i) 返回第 i 个元素的引用。
vector_slice &operator = (const vector_slice &vs) 赋值运算符。
vector_slice &assign_temporary (vector_slice &vs) 赋值一个临时对象。可能会更改向量切片 vs
template<class AE>
vector_slice &operator = (const vector_expression<AE> &ae)
扩展赋值运算符。
template<class AE>
vector_slice &assign (const vector_expression<AE> &ae)
将向量表达式赋值给子向量。赋值的左侧和右侧应独立。
template<class AE>
vector_slice &operator += (const vector_expression<AE> &ae)
计算赋值运算符。将向量表达式加到子向量上。
template<class AE>
vector_slice &plus_assign (const vector_expression<AE> &ae)
将向量表达式加到子向量上。赋值的左侧和右侧应独立。
template<class AE>
vector_slice &operator -= (const vector_expression<AE> &ae)
计算赋值运算符。从子向量中减去向量表达式。
template<class AE>
vector_slice &minus_assign (const vector_expression<AE> &ae)
从子向量中减去向量表达式。赋值的左侧和右侧应独立。
template<class AT>
vector_slice &operator *= (const AT &at)
计算赋值运算符。将子向量与标量相乘。
template<class AT>
vector_slice &operator /= (const AT &at)
计算赋值运算符。将子向量除以标量。
void swap (vector_slice &vs) 交换子向量的内容。
const_iterator begin () const 返回一个指向 vector_slice 开头的 const_iterator
const_iterator end () const 返回一个指向 vector_slice 结尾的 const_iterator
iterator begin () 返回一个指向 vector_slice 开头的 iterator
iterator end () 返回一个指向 vector_slice 结尾的 iterator
const_reverse_iterator rbegin () const 返回一个指向反向 vector_slice 开头的 const_reverse_iterator
const_reverse_iterator rend () const 返回一个指向反向 vector_slice 结尾的 const_reverse_iterator
reverse_iterator rbegin () 返回一个指向反向 vector_slice 开头的 reverse_iterator
reverse_iterator rend () 返回一个指向反向 vector_slice 结尾的 reverse_iterator

简单投影

描述

自由函数 subslice 支持构造向量切片。

原型


    template<class V>
    vector_slice<V> subslice (V &data,
       V::size_type start, V::difference_type stride, V::size_type size);
    template<class V>
    const vector_slice<const V> subslice (const V &data,
       V::size_type start, V::difference_type stride, V::size_type size);

通用投影

描述

自由函数 project 支持构造向量切片。现有的 vector_slice 可以与更远的范围或切片组合。结果切片是使用现有切片的 compose 函数计算的。

原型


    template<class V>
    vector_slice<V> project (V &data, const slice &s);
    template<class V>
    const vector_slice<const V> project (const V &data, const slice &s);
    template<class V>
    vector_slice<V> project (vector_slice<V> &data, const range &r);
    template<class V>
    const vector_slice<V> project (const vector_slice<V> &data, const range &r);
    template<class V>
    vector_slice<V> project (vector_slice<V> &data, const slice &s);
    template<class V>
    const vector_slice<V> project (const vector_slice<V> &data, const slice &s);

定义

定义于头文件 vector_proxy.hpp 中。

类型要求

复杂度

线性复杂度取决于切片的大小。

示例

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/vector_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    vector<double> v (3);
    for (int i = 0; i < 3; ++ i)
        project (v, slice (0, 1, 3)) (i) = i;
    std::cout << project (v, slice (0, 1, 3)) << std::endl;
}

版权 (©) 2000-2002 Joerg Walter, Mathias Koch
使用、修改和分发受 Boost 软件许可协议 1.0 版的约束。(请参阅随附文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)。