присваивание между элементами массива с использованием итератора boost multi_array

Работая в системе Kubuntu 14.04 с gcc 4.8.4, я столкнулся со следующей проблемой:

Используя 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

Решение

Причина в том, что итератор участвует в operator[] за boost::multi_array является входной итератор, который не обязательно должен быть изменчивым.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector