1

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] ) ;

ブースト 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 で使用したいコードは、機能しない型の代入を使用して記述されています。私は何が欠けていますか?

4

1 に答える 1

2

その理由は、operator[]forに含まれる反復子boost::multi_array入力反復子であり、変更可能である必要がないからです。

于 2016-01-04T10:07:13.190 に答える