use*_*215 2 c++ boost sparse-matrix
提升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;
}
Run Code Online (Sandbox Code Playgroud)
为什么ublas::matix
只取20
字节4x4 matrix
(而不是8*4*4=128
字节),ublas::compressed_matrix
而非2*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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1083 次 |
最近记录: |