简体   繁体   English

如何在初始化列表内创建一个非空的boost ublas :: vector?

[英]How to create a nonempty boost ublas::vector inside an initializer list?

I'm trying to do something like this 我正在尝试做这样的事情

#include <boost/numeric/ublas/vector.hpp>
using namespace boost::numeric::ublas;

class A{
 protected:
    vector< double > a_;
 public:
    A( vector< double > a ) :
        a_( a ) {};
};

class B : public A{
 public:
    B() : A( vector< double >( { 1.25, 2.75, 3.34 } ) ){};
};

The result should be, that the vector a_ gets declared as a three-vector containing a_[0]=1.25, a_[1]=2.75, a_[2]=3.34 . 结果应该是,向量a_被声明为包含a_[0]=1.25, a_[1]=2.75, a_[2]=3.34的三个向量。

This code is not working because boost::numeric::ublas::vector does not have a constructor which can handle vector<double>( { 1.25, 2.75, 3.34 } ) 该代码无法正常工作,因为boost::numeric::ublas::vector没有可处理vector<double>( { 1.25, 2.75, 3.34 } ) boost::numeric::ublas::vector vector<double>( { 1.25, 2.75, 3.34 } )的构造函数

What should I use instead? 我应该怎么用呢? Maybe the constructor 也许构造函数

vector (size_type size, const double &data)

from the boost documentation helps? 来自boost文档有帮助吗?

You may change the default storage type of an ublas/vector from unbounded_array to std::vector to get initializer_list support or introduce a helper function to initialize the member: 您可以将ublas / vector的默认存储类型从unbounded_array更改为std :: vector以获得initializer_list支持或引入帮助器函数来初始化成员:

#include <iostream>
#include <boost/numeric/ublas/vector.hpp>
using namespace boost::numeric::ublas;

template <typename T>
unbounded_array<T> make_unbounded_array(std::initializer_list<T> list) {
    unbounded_array<T> result(list.size());
    for(unsigned i = 0; i < list.size(); ++ i)
        result[i] = *(list.begin() + i);
    return result;
}

class Example
{
    public:
    vector<double, std::vector<double>> v0;
    vector<double> v1;

    public:
    Example()
    :   v0({ 1.25, 2.75, 3.34 }),
        v1(make_unbounded_array({ 1.25, 2.75, 3.34 }))
    {}
};


int main(int argc, char **argv) {
    Example example;
    std::cout
        << example.v0[0] << " == " << example.v1[0] << '\n'
        << example.v0[1] << " == " << example.v1[1] << '\n'
        << example.v0[2] << " == " << example.v1[2] << '\n'
    ;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM