因此,对于学校作业,我正在编写一个程序,该程序使用动态2D'数组'来对矩阵进行建模并对它们执行操作。所以我所做的是创建一个名为 matrix 的结构,它包含两个行和列的整数,以及一个用于'array'的双指针。我初始化了这样的指针:
int **ary=new int*[row];
for(int i=0;i<row;++i)
ary[i]=new int[col];
现在我知道我的程序看起来非常缓慢,效率低下,对于本网站上的人来说一般都很糟糕,但请记住,我正在做学校作业而我不能使用花哨的像vector和all这样的东西。
然后我尝试编写然后读取二进制文件中的结构对象,就像使用fstream对象 y 一样:
matrix M;
y.write((char*)&M,sizeof M);
y.read((char*)&M,sizeof M);
该程序有效,但我输入的内容与文件读取的内容不同。为什么会这样?还有什么其他方法(使用fstream)将我的矩阵存储在文件中?
注意:很明显,我对这个网站是全新的,到目前为止我还不知道在这个网站上提问的正确礼仪。如果我的问题在某种程度上看起来很奇怪或者缺少某些信息,请发表评论。欢迎进行建设性修改。
答案 0 :(得分:2)
如果您在一个块中分配所有内存,则可以这样做(如果您不想这样做,请参阅其他答案):
y.write(static_cast<char*>(block), sizeof(int) * row * col);
y.read(static_cast<char*>(block), sizeof(int) * row * col);
基本上我正在分配一个大型数组,然后使每一行指向数组的相应部分。 现在,如果你写
row
你会得到同样的东西。现在可能很明显,如果您在阅读时不知道col
和* What went wrong:
A problem occurred configuring project ':mobile'.
> Cannot evaluate module matrix : Configuration with name 'default' not found.
的值,则无效。您还需要将它们写入文件,并在阅读时阅读第一个文件。
答案 1 :(得分:1)
ary
处的每个指针都是内存中的不同块,因此您需要单独编写和读取它们:
写:
for(int i=0;i<row;++i)
y.write((char*)&(M[i]),sizeof(int) * col);
读:
for(int i=0;i<row;++i)
y.read((char*)&(M[i]),sizeof(int) * col);
如果您发布matrix
的定义,我可以提供更好的帮助。