gpt4 book ai didi

c++ - boost压缩矩阵存储

转载 作者:行者123 更新时间:2023-11-30 01:31:01 25 4
gpt4 key购买 nike

boost ublas::compressed_matrix 应该只为非零元素分配空间。但在下面的示例中,我得到了奇怪的结果。

#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/io.hpp>

using namespace std;
using namespace boost::numeric::ublas;

int main () {
{
compressed_matrix<double,row_major> m (4, 4, 2*2);
cout << sizeof(m) << "\n"; // prints 56
cout << m << std::endl;
}

{
matrix<double> m (4, 4);
cout << sizeof(m) << "\n"; // prints 20
cout << m << std::endl;
}

return 0;
}

为什么 ublas::matix 对于 4x4 矩阵 只占用 20 字节(而不是 8*4*4=128 字节),而 ublas::compressed_matrix2*2=4 非零元素占用 56 字节(而不是 4*8=32字节)?

我也很困惑如何指定 ublas::compressed_matrix 中非零元素的位置。如果我尝试存储超过构造函数中设置的非零元素的数量,会发生什么?

请帮忙澄清。

最佳答案

sizeof() 是一个编译时运算符,它仅查看对象的直接大小,而不查看对象在运行时可能进行的任何分配。例如:

class SizeTest
{
public:

char* m_pData;

SizeTest()
{
m_pData = new char[1000];
}
};

int main (void)
{
SizeTest Test;
cout << sizeof(Test) << "\n"; //Probably prints 4 depending on your system
return 0;
}

关于c++ - boost压缩矩阵存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3750722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com