将几个数字分配给Boost Vector
Assign several numbers to a boost vector
假设我想将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_front
或push_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
库使第二行中的语法成为可能。
相关文章:
- boost::variant - 如何分配值
- 在cpp中使用boost-python的python代码是否进行动态内存分配
- 如何使用boost.thread运行多个接收器,每个线程应该分配给每个接收器?
- 动态分配许多 Boost::直方图对象
- 将动态分配对象传递到 boost::any 构造函数中
- 我可以在 Boost.Spirit.Qi 中向列表运算符 (%) 提供内存分配提示吗?
- 在 boost::compute 中分配大向量
- 如何使用boost ::与扩展STL容器的自定义容器分配
- 从 boost::存档:binary_iarchive 反序列化 std::string 时出现错误的分配异常
- 使用Boost Spirit将默认值分配给变量
- boost :: Spirit属性分配:struct is_nullary:基本类型无法成为结构或类型
- 重新分配独立的boost ::线程安全吗?
- 使用 boost::interprocess 在共享内存中分配用户定义的结构
- 使用 boost::make_shared 分配字符* 数组
- boost::容器::small_vector似乎没有就地分配
- Boost::序列化 - 如何序列化需要数据分配但没有默认构造函数的数据结构
- Qt有与Boost的分配模块等效的东西吗?
- 初始化具有固定尺寸的向量的向量,并具有boost分配
- 在OpenMP循环中分配boost::ptr_vector
- 如何在构造函数外部分配 Boost 的情况下序列化大型错误定位浮点数组?