gpt4 book ai didi

c++ - 给 boost vector 分配几个数字

转载 作者:行者123 更新时间:2023-12-02 10:25:59 32 4
gpt4 key购买 nike

假设我要为 vector v分配3个数字的列表,以使v [0]是列表的第一个元素,v [1]是列表的第二个元素,v [2]是第三个元素。
我发现对于标准 vector 模板,有一个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
}

现在,当我尝试执行此操作以增强 vector 时
boost::numeric::ublas::vector<int> values
values += 1,2,3,4,5,6,7,8,9;

它告诉我'没有运算符“+ =”匹配这些操作数。如何使用增强 vector 解决此问题? (我认为它一定很简单,但是我太傻了,看不到它)

最佳答案

一种方法是使用流插入运算符。

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

不幸的是,如果您没有适当调整 vector 的大小,它将导致核心转储,因此这是此方法的潜在缺点。我最初发布了一个说要使用 push_front( values ) = 1,2,3,4,5,6,7,8,9;的答案,但是后来我尝试了一下,得知该增强 vector 没有 push_frontpush_back运算符时感到惊讶。

一个丑陋的选择是设置和使用boost vector 的基础数据表示,但是这很hackes!
    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库使第二行中的语法成为可能。

关于c++ - 给 boost vector 分配几个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21351571/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com