- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
不固定矩阵转置 C++通用代码实现
二进制文件 matrices.dat 中的各矩阵数据存储顺序格式如下:
1)首先的 4 个字节以整数( int )格式存储矩阵数目;
2)接着的 4 个字节以整数( int)格式存储第一个矩阵行数 m, 然后的 4 个字节以整数( int )格式存储第一个矩阵列数 n,随后依次 存储第一个矩阵各个元素(顺序是: a11, a12, ? a1n, a21, a22, ? a2n, ? am1, am2, ? amn),共计 m*n 个双精度实数( double),占 8*m*n 个字节;
3)接着存储的就是第二个矩阵的数据, 格式同前一矩阵,即 4个 字节以整数( int)格式存储该矩阵行数,再 4 个字节以整数( int )格 式存储该矩阵列数,紧接着以双精度实数( double)格式存储该矩阵 各个元素,以此类推存储各个矩阵数据。将各矩阵数据(行数、列数 和各个元素值)读入内存, 然后转置各矩阵,再将各转置后矩阵数据 依原来从文件读入顺序写回文件,覆盖原来的内容。 #includeiostream #includefstream #includeiomanip using namespace std;
class rect1 {
private:
}
}
public:
int M,N;
double **a;
void setrect1(int m, int n,double **p)
{
//a=new double [m][n];
a = new double* [m];
a[0] = new double[m * n]; // 一次性分配所有空间
for(int ii=1; iim; ii++)
{
a[ii] = a[ii-1] + n; // 分配每个指针所指向的数组
}
M=m;
N=n;
coutM\tN\tendl;
for (int i=0;im;i++)
{
for (int j=0;jn;j++)
{
a[i][j]=p[i][j];
coutsetw(6)a[i][j]
coutendl;
};
}
rect1() {};
~rect1 ()
{
if (a) {
delete[] a[0];
delete[] a;
}
}
};
int main()
{
int num;
rect1 tmpr1;
int tmpn,tmpm;
double **tmpp;
ifstream infile(matrices2.dat,ios::in|ios::binary);
if(!infile)
{
coutfailed!endl;
exit(0);
}
infile.read((char*)num,sizeof(int)); coutnumendl;
rect1 *r1;
r1=new rect1[num];
for(int i=0;inum;i++)
{ infile.read((char*)tmpm,sizeof(int)); infile.read((char*)tmpn,sizeof(int));
//pp=new double [tmpm][tmpn];
tmpp=new double * [tmpm]; // 分配指针数组
for(int iii=0; iiitmpm; iii++)
{
tmpp[iii] = new double[tmpn]; // 分配每个指针所指向的
数组
}
for(int i1=0;i1tmpm;i1++)
for(int j1=0;j1tmpn;j1++)
infile.read((char*)tmpp[i1][j1],sizeof(double));
tmpr1.setrect1(tmpm,tmpn,tmpp);
r1[i]=tmpr1;
delete[] tmpp[0];
delete[] tmpp;
}
infile.close();
ofstream ofile(matrices2.dat,ios::out|ios::binary);
if(!ofile)
{
coutfailed!endl;
exit(0);
}
ofile.write((char*)num,sizeof(int));
for(int k=0;knum;k++)
{
ofile.write((char*)r1[k].N,sizeof(int));
//coutr1[k].M\t;
ofile.write((char*)r1[k].M,sizeof(int));
//coutr1[k].Nendl;
for(int i2=0;i2r1[k].N;i2++)
{
{
}
}
for(int j2=0;j2r1[k].M;j2++)
ofile.write((c
文档评论(0)