Hello
there,
I've observed an
unexpected result when I use vector_slice with the following
code:
typedef
boost::numeric::ublas::vector<double> udvector;
typedef
boost::numeric::ublas::vector<float> uvector;
size_t block_size = 3;
uvector v1(9);
udvector
v2(9);
for(size_t i=0; i<9; i++)
{
v1[i] = i;
v2[i] =
i+10;
}
cout <<
"v1="<<v1<<endl;
cout <<
"v2="<<v2<<endl;
boost::numeric::ublas::slice vs(0, 1,
block_size);
const
boost::numeric::ublas::vector_slice<const udvector> blk_v1(v1,
vs);
cout << "blk_v1=" << blk_v1
<< endl;
udvector
blk_v2(boost::numeric::ublas::project(v2, vs));
cout << "blk_v1=" << blk_v1
<< endl;
The ouput of the above code
:
v1=[9](0,1,2,3,4,5,6,7,8)
v2=[9](10,11,12,13,14,15,16,17,18)
blk_v1=[3](0,1,2)
blk_v1=[3](10,11,12)
The last
line of the output shows that the content of the
vector_slice<const udvector> blk_v1 is wrong. I wonder if the problem is
due to the fact that vector_slice has the different type (double) as the vector v1(float). However, there is not any compilation warnings or errors for
this. Moreover, the problem doesn't show up if we just switch the
order of the two lines such that :
udvector
blk_v2(boost::numeric::ublas::project(v2, vs))
const
boost::numeric::ublas::vector_slice<const udvector> blk_v1(v1,
vs);
could anyone
explain, thank you
Myt est
environment: Linux centos, gcc3_4, boost 1_38
Wenxuan
Teng
__________ Information provenant
d'ESET NOD32 Antivirus, version de la base des signatures de virus 4138
(20090608) __________
Le message a été vérifié par ESET NOD32
Antivirus.
http://www.eset.com