使用boost multi_array迭代器在数组元素之间进行赋值

时间:2016-01-04 09:28:13

标签: c++ iterator operator-keyword assign boost-multi-array

使用gcc 4.8.4在Kubuntu 14.04系统上工作我遇到了以下问题:

使用std:vector,我可以通过迭代器在矢量元素之间进行分配:

std::vector<float> v ;
v.push_back(0.0) ;
v.push_back(1.0) ;
auto vv = v.begin() ;
vv[0] = vv[1] ;
assert ( v[0] == v[1] ) ;

使用boost multi_array,这会失败:

typedef boost::multi_array<float, 1> array_type; 
boost::array<array_type::index, 1> shape = {{ 2 }};
array_type a(shape) ;
a[0] = 0.0 ;
a[1] = 1.0 ;
auto aa = a.begin() ;
aa[0] = aa[1] ;
assert ( a[0] == a[1] ) ; // fails, a[0] is unmodified

我可以使用不同的习惯用法来解决这个问题,比如

aa[0] = *(aa+1) ;

但我想要与multi_array一起使用的代码是使用不起作用的类型的赋值编写的。我错过了什么?

1 个答案:

答案 0 :(得分:2)

原因是operator[] boost::multi_array涉及的迭代器是input iterator,不需要是可变的。