typedef一个向量,并将boost :: numeric :: ublas :: vector固定大小

时间:2019-03-12 12:24:56

标签: c++ vector boost typedef boost-ublas

我的意思是typedef是具有固定大小的向量/ boost向量的名称,然后是对应的迭代器的名称。 我可以做的是(请参见下文)

typedef std::array<double, 3> point_3d_array;
typedef point_3d_array::iterator point_3d_iterator;
typedef point_3d_array::const_iterator point_3d_const_iterator;

想法是稍后在我的代码中使用类似

point_3d_array p;
for ( point_3d_const_iterator it = p.begin() ; it != p.end() ; it++ ) {
   my code
}

问题1:这可能与

  1. std::vector<double>

  2. boost::numeric::ublas::vector<double>

如果不可能:

  1. 问题2:什么是替代实现? (下面的内容除外)。

  2. 问题3:我将如何typedef迭代器?

到目前为止,由于找不到解决方法,因此定义了自己的类(请参见下文)。 但这带来了(至少)必须重新定义我自己的beginend和迭代器(例如this)的负担。我的意思是避免这种情况。

问题4: 我在operator+=的定义中放了两条替代行(请参见下文)。 其中之一不起作用。有什么问题吗?

typedef std::array<double, 3> point_3d_array;
typedef point_3d_array::iterator point_3d_iterator;
typedef point_3d_array::const_iterator point_3d_const_iterator;

class point_3d {
public:
    /*
     * Default constructor
     */
    point_3d() : _point_3d({ 0, 0, 0 }) { };
    /*
     * Initialization constructor
     * Is copy constructor automatically generated?
     */
    point_3d(const double x1, const double x2, const double x3) : _point_3d({x1, x2, x3}) {};

    /*
     * Iterator members
     */
    point_3d_iterator begin() { return _point_3d.begin(); }
    point_3d_iterator end() { return _point_3d.end(); }
    point_3d_const_iterator begin() const { return _point_3d.begin(); }
    point_3d_const_iterator end() const { return _point_3d.end(); }
    /*
     * Array subscript operators
     */
    double & operator[](size_t i) {
        return this->_point_3d[ i ];
    }
    const double & operator[](size_t i) const {
        return this->_point_3d[ i ];
    }

    /*
     * Basic operation members
     */
    point_3d & operator+=(const point_3d &rhs) {
        for ( size_t i = 0 ; i < this->_point_3d.size() ; i++ ) {
            //this[ i ] += rhs[ i ];  // Why are Array subscript operators not working in the lhs?
            this->_point_3d[ i ] += rhs[ i ];
        }
        return *this;
    }

private:
    point_3d_array _point_3d;
};

1 个答案:

答案 0 :(得分:2)

{em> 都没有std::vectorboost::numeric::ublas::vectortypedef设计为固定大小。没有模板参数指定容器的大小。

因此,没有固定大小的std::vector对这些容器没有意义。

如果您想限制std::vector的大小,则一种方法是使用xlwings编写自己的模板类以对有效负载进行建模。