向量代理(Vector Proxies)

向量範圍(Vector Range)

說明

模板類vector_range<V> 允許定位(addressing)向量元素的一個子範圍(sub-range)。

例子

#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 被引用的向量的類型。

模型(Model of)

向量表達式(Vector Expression)

如果指定的切分(slice)落在向量的索引(index)範圍之外,那麼vector_range 就不是一個良構的(well formed)向量表達式。也就是說,訪問向量的索引範圍之外的元素是未定義的(undefined)

類型要求(Type requirements)

沒有,除了由向量表達式(Vector Expression) 所施加的類型要求。

公有基類(Public base classes)

vector_expression<vector_range<V> >

成員

成員 說明
vector_range (vector_type &data, const range &r) 構造一個子向量(sub vector)。
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) 賦值給一個臨時變量。可能會改變向量範圍(vector range) vr
template<class AE>
vector_range &operator = (const vector_expression<AE> &ae)
擴展賦值運算符。
template<class AE>
vector_range &assign (const vector_expression<AE> &ae)
將一個向量表達式賦給一個子向量(sub vector)。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
vector_range &operator += (const vector_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。將一個向量表達式加到一個子向量中。
template<class AE>
vector_range &plus_assign (const vector_expression<AE> &ae)
將一個向量表達式加到一個子向量中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
vector_range &operator -= (const vector_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。從一個子向量中減去一個向量表達式。
template<class AE>
vector_range &minus_assign (const vector_expression<AE> &ae)
從一個子向量中減去一個向量表達式。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
vector_range &operator *= (const AT &at)
一個運算賦值運算符(computed assignment operator)。 將一個子向量乘以一個標量。
template<class AT>
vector_range &operator /= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將一個子向量除以一個標量。
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 返回指向反轉的(reversed)vector_range開始處的const_reverse_iterator
const_reverse_iterator rend () const 返回指向反轉的(reversed)vector_range終止處的const_reverse_iterator
reverse_iterator rbegin () 返回指向反轉的(reversed)vector_range開始處的reverse_iterator
reverse_iterator rend () 返回指向反轉的(reversed)vector_range終止處的reverse_iterator

Simple Projections

說明

自由函數subrange 支持構造向量的範圍(vector ranges)。

原型


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

Generic Projections

說明

自由函數project 支持構造向量範圍( vector ranges )。已經存在的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 中。

類型要求(Type requirements)

複雜度(Complexity)

依賴於範圍大小的線性複雜度。

例子

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

說明

模板類vector_slice<V> 允許定位(addressing)向量的切分( slice )。

例子

#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 被引用的向量的類型。

模型(Model of)

向量表達式(Vector Expression)

如果指定的切分(slice)落在向量的索引(index)範圍之外,那麼vector_slice 就不是一個良構的(well formed)向量表達式。也就是說,訪問向量的索引範圍之外的元素是未定義的(undefined)

類型要求(Type requirements)

沒有,除了由向量表達式(Vector Expression) 所施加的類型要求。

公有基類(Public base classes)

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) 賦值給一個臨時變量。可能會改變向量切分(vector slice) 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)
一個運算賦值運算符(computed assignment operator)。將一個向量表達式加到一個子向量中。
template<class AE>
vector_slice &plus_assign (const vector_expression<AE> &ae)
將一個向量表達式加到一個子向量中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
vector_slice &operator -= (const vector_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。從一個子向量中減去一個向量表達式。
template<class AE>
vector_slice &minus_assign (const vector_expression<AE> &ae)
從一個子向量中減去一個向量表達式。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
vector_slice &operator *= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將一個子向量乘以一個標量。
template<class AT>
vector_slice &operator /= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將一個子向量除以一個標量。
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 返回指向反轉的(reversed)vector_slice開始處的const_reverse_iterator
const_reverse_iterator rend () const 返回指向反轉的(reversed)vector_slice終止處的const_reverse_iterator
reverse_iterator rbegin () 返回指向反轉的(reversed)vector_slice開始處的reverse_iterator
reverse_iterator rend () 返回指向反轉的(reversed)vector_slice終止處的reverse_iterator

Simple Projections

說明

自由函數subslice 支持構造向量切分(vector slices)。

原型


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

Generic Projections

說明

自由函數project 支持構造向量切分( vector slices )。已經存在的函數vector_slice 可以用其它的範圍和切分(slice)來組合。切分(slice)結果使用已經存在的切分( slices )的 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 中。

類型要求(Type requirements)

複雜度(Complexity)

依賴於slice大小的線性複雜度。

例子

#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;
}

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