具有BOOST / CSTDINT类型的BOOST稀疏向量数组;失败,为什么?

时间:2014-03-21 15:49:00

标签: c++ boost

早上好,

我正在做以下事情:

#include <new>
//Boost for sparse and cstdint
#include <boost/numeric/ublas/vector_sparse.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <boost/cstdint.hpp>

int main(){

   boost::numeric::ublas::compressed_vector<boost::int_fast8_t> *p = new     boost::numeric::ublas::compressed_vector<boost::int_fast8_t>[100];
   boost::numeric::ublas::compressed_vector<boost::int_fast8_t> t (12,2);

   p[0] = t;

   for(boost::int_fast8_t i=0;i<t.size();i++)
     {

    p[0](i) = i;

     }
   std::cout << p[0] << std::endl;
}

哪个收益率:[12](
然而,如果我使用标准类型,即int,它将按预期打印范围。

我做错了吗?或者这是不可能的?

我很欣赏uint8_t在32位机器上实际上并不快,但我需要节省内存。

TIA!

1 个答案:

答案 0 :(得分:0)

您的int_fast8_t实际上等同于char(已签名或未签名)类型,并在打印时视为此类。

auto& data = p[0];
std::copy(data.begin(), data.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;

修复了(通过明确地将值视为整数,而不是字符)。

与数组,稀疏,stdints或其他任何事情无关。只是iostreams :))

查看 Live On Coliru