Работы на 14,04 системе Kubuntu с GCC 4.8.4 я столкнулся с следующей проблемой:соответствия между элементами массива с использованием подталкивания multi_array итератора
Использованием зЬм: вектор, я могу назначить между векторными элементами с помощью итератора:
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]) ;
используя повышающий 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, написан с использованием назначений типа, который не работает. Что мне не хватает?
Извините, мой комментарий был полным вздором! (Хотя входные итераторы действительно не требуют, чтобы op-'[]' существовал.) –
Действительно. Документ boost сообщает, что «Это итератор над значениями A. Если NumDims == 1, то он моделирует итератор случайного доступа. В противном случае он моделирует Итератор с обратным доступом, читаемый итератор, записываемый итератор и выходной итератор. ' Таким образом, в этом случае это будет Итератор с произвольным доступом. –