Boost logo

Ublas :

From: Darin DeForest (darin_at_[hidden])
Date: 2005-09-21 14:57:13


Given the following code snippet:

ublas::vector<float> min;
min.assign( ublas::scalar_vector<float> ( 10, std::numeric_limits<float>::max() ) );

The question is should this work? It used to work with a previous version of boost but with 1.33 it doesn't'

Looking at the methods in the stack trace

boost::numeric::ublas::bad_argument::raise() Line 108 C++
boost::numeric::ublas::same_impl_ex<unsigned int>(const unsigned int & size1=0, const unsigned int & size2=10, const char * file=0x0099d988, int line=265) Line 279 + 0x113 C++
boost::numeric::ublas::indexing_vector_assign<boost::numeric::ublas::scalar_assign,boost::numeric::ublas::vector<float,boost::numeric::ublas::unbounded_array<float,std::allocator<float> > >,boost::numeric::ublas::scalar_vector<float> >(boost::numeric::ublas::vector<float,boost::numeric::ublas::unbounded_array<float,std::allocator<float> > > & v={...}, const boost::numeric::ublas::vector_expression<boost::numeric::ublas::scalar_vector<float> > & e={...}) Line 265 + 0x34 C++
boost::numeric::ublas::vector_assign<boost::numeric::ublas::scalar_assign,boost::numeric::ublas::vector<float,boost::numeric::ublas::unbounded_array<float,std::allocator<float> > >,boost::numeric::ublas::scalar_vector<float> >(boost::numeric::ublas::vector<float,boost::numeric::ublas::unbounded_array<float,std::allocator<float> > > & v={...}, const boost::numeric::ublas::vector_expression<boost::numeric::ublas::scalar_vector<float> > & e={...}, boost::numeric::ublas::dense_proxy_tag __formal={...}) Line 280 + 0xd C++
boost::numeric::ublas::vector_assign<boost::numeric::ublas::scalar_assign,boost::numeric::ublas::vector<float,boost::numeric::ublas::unbounded_array<float,std::allocator<float> > >,boost::numeric::ublas::scalar_vector<float> >(boost::numeric::ublas::vector<float,boost::numeric::ublas::unbounded_array<float,std::allocator<float> > > & v={...}, const boost::numeric::ublas::vector_expression<boost::numeric::ublas::scalar_vector<float> > & e={...}) Line 448 + 0x11 C++
boost::numeric::ublas::vector<float,boost::numeric::ublas::unbounded_array<float,std::allocator<float> > >::assign<boost::numeric::ublas::scalar_vector<float> >() Line 174 + 0xd C++

        
I see same_impl_ex is testing to see if the l-value and r-value vectors are the same size, which they aren't. And that is throwing the exception.

The fix seems to perform min.resize( 10 ), prior to the assign statement, and I can't use min = scalar_vector, because of the 'size' : is not a member of 'boost::numeric::ublas::vector_container<C>"