早上好,
我正在做以下事情:
#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!
答案 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 :))