将几个数字分配给Boost Vector

Assign several numbers to a boost vector

本文关键字:分配 Boost Vector 数字 几个      更新时间:2023-10-16

假设我想将3个数字的列表分配给vector v,以便v [0]是列表的第一个元素,v [1]第二个和v [2]第三。我发现对于标准向量模板,有boost的分配库

#include <boost/assign/std/vector.hpp> // for 'operator+=()'
using namespace boost::assign; // bring 'operator+=()' into scope
int main {
    vector<int> values;  
    values += 1,2,3,4,5,6,7,8,9; // insert values at the end of the container
}

现在,当我尝试为Boost Vector

执行此操作时
boost::numeric::ublas::vector<int> values
values += 1,2,3,4,5,6,7,8,9;

它告诉我'没有操作员" ="与这些操作数匹配。如何使用Boost向量解决此问题?(我认为这一定是简单的东西,但我太愚蠢了,无法看到它)

做到这一点的一种方法可能是使用流插入操作员。

#include <boost/assign.hpp>
#include <boost/assign/std/vector.hpp> // for 'operator+=()'
#include <boost/assert.hpp> 
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/assignment.hpp>
#include <boost/numeric/ublas/io.hpp>
using namespace std;
using namespace boost::assign; // bring 'operator+=()' into scope
int main()
{
    boost::numeric::ublas::vector<int> values(9);
    values <<= 1,2,3,4,5,6,7,8,9;
    BOOST_ASSERT( values.size() == 9 );
    BOOST_ASSERT( values[0] == 1 );
    BOOST_ASSERT( values[8] == 9 );
    std::cout << values << std::endl;
}

结果是程序打印:

[9](1,2,3,4,5,6,7,8,9)

不幸的是,如果您还没有适当的矢量大小,它将核心转储,因此这是该方法的潜在缺点。我最初发布了一个答案,说使用push_front( values ) = 1,2,3,4,5,6,7,8,9;,但后来我尝试了它,并惊讶地得知该提升向量没有push_frontpush_back操作员。

一个丑陋的替代方法是设置和使用Boost Vector的基础数据表示形式,但这相当于hackish!

    boost::numeric::ublas::vector<int, std::vector<int>> values;
    push_back(values.data()) = 1,2,3,4,5,6,7,8,9;

这将基础数据表示为std::vector<int>,然后使用Boost assign库使第二行中的语法成为可能。