高手帮忙看一下这个c++代码,谢谢
c++求转置矩阵,#include<iostream>usingnamespacestd;voiddisplay(inta,intb,int**c);voidswap(i...
c++求转置矩阵,#include <iostream>
using namespace std;
void display(int a,int b,int **c);
void swap(int **a,int **b,int x,int y);
int main()
{
int m,n,**a,**b;
cin>>m>>n;
a = new int *[m];
for (int i=0;i<m;++i)
a[i]=new int [n];
for( i=0; i<m; ++i) {
for(int j=0; j<n; ++j){
cin>>a[i][j];
}
cout<<endl;
}
display (m,n,a);
swap(a,b,m,n);
display (n,m,b);
delete [] a,b;
return 0;
}
void display(int a,int b,int **c)
{
for (int i=0;i<a;++i){
for (int j=0;j<b;++j){
cout.width (4);
cout<<c[i][j];
}
cout<<endl;
}
}
void swap(int **a,int **b,int x,int y)
{
for (int i=0;i<x;++i){
for (int j=0;j<y;j++)
b[j][i]=a[i][j];
cout<<endl;
}
} 展开
using namespace std;
void display(int a,int b,int **c);
void swap(int **a,int **b,int x,int y);
int main()
{
int m,n,**a,**b;
cin>>m>>n;
a = new int *[m];
for (int i=0;i<m;++i)
a[i]=new int [n];
for( i=0; i<m; ++i) {
for(int j=0; j<n; ++j){
cin>>a[i][j];
}
cout<<endl;
}
display (m,n,a);
swap(a,b,m,n);
display (n,m,b);
delete [] a,b;
return 0;
}
void display(int a,int b,int **c)
{
for (int i=0;i<a;++i){
for (int j=0;j<b;++j){
cout.width (4);
cout<<c[i][j];
}
cout<<endl;
}
}
void swap(int **a,int **b,int x,int y)
{
for (int i=0;i<x;++i){
for (int j=0;j<y;j++)
b[j][i]=a[i][j];
cout<<endl;
}
} 展开
4个回答
展开全部
int **&CreateMat(int **&a,int m,int n)
{ //这里没有考虑,内存用光,无法分配内存的情况!
a = new int *[m];
for (int i=0;i<m;++i)a[i]=new int [n];
return a;
}
void DestoryMat(int **&a,int m)
{
for(i=0;i<m;i++)delete[] a[i]; delete [] a;
//如果需要确保已经释放内存的指针为空, 要加上a=NULL;
}
int **LoadMat(int **a,int m,int n)
{
for( i=0; i<m; ++i)
for(int j=0; j<n; ++j)
cin>>a[i][j];
return a;
}
using namespace std;
void display(int a,int b,int **c);
void swap(int **a,int **b,int x,int y);
int main()
{
int m,n,**a,**b;
cin>>m>>n;
CreateMat(a,m,n);
CeateMat(b,n,m); //你这一步没有做,没给指针b分配内存,b 是个野指针了
LoadMat(a,m,n);
swap(a,b,m,n);
display (b,m,n);
DestoryMat(a,m);
//delete []a,b; delete[]运算符不能这么用。
//这实际是个逗号表达式,先执行delete a[];
//后执行b;这一步没有实际执行动作,只是表达式结果为b;
要delete []a;delete []b;才可以。但是这样会有内存泄露。
//要先循环删除 a[i],b[i];才可以删除a,b;
//不然 a 删除后,原来给a[0]~a[n-1]分配的内存,无变量持有了,没有办法释放了!内存泄露!!
DestoryMat(b,n);
return 0;
}
void display(const int **c,int m,int m)
{。。。。}
void swap(int **a,int **b,int m,int n){
for (int i=0;i<m;++i)
for (int j=0;j<n;j++)
if(i<=j)b[j][i]=a[i][j];
}
PS:这里最好做个矩阵类。
{ //这里没有考虑,内存用光,无法分配内存的情况!
a = new int *[m];
for (int i=0;i<m;++i)a[i]=new int [n];
return a;
}
void DestoryMat(int **&a,int m)
{
for(i=0;i<m;i++)delete[] a[i]; delete [] a;
//如果需要确保已经释放内存的指针为空, 要加上a=NULL;
}
int **LoadMat(int **a,int m,int n)
{
for( i=0; i<m; ++i)
for(int j=0; j<n; ++j)
cin>>a[i][j];
return a;
}
using namespace std;
void display(int a,int b,int **c);
void swap(int **a,int **b,int x,int y);
int main()
{
int m,n,**a,**b;
cin>>m>>n;
CreateMat(a,m,n);
CeateMat(b,n,m); //你这一步没有做,没给指针b分配内存,b 是个野指针了
LoadMat(a,m,n);
swap(a,b,m,n);
display (b,m,n);
DestoryMat(a,m);
//delete []a,b; delete[]运算符不能这么用。
//这实际是个逗号表达式,先执行delete a[];
//后执行b;这一步没有实际执行动作,只是表达式结果为b;
要delete []a;delete []b;才可以。但是这样会有内存泄露。
//要先循环删除 a[i],b[i];才可以删除a,b;
//不然 a 删除后,原来给a[0]~a[n-1]分配的内存,无变量持有了,没有办法释放了!内存泄露!!
DestoryMat(b,n);
return 0;
}
void display(const int **c,int m,int m)
{。。。。}
void swap(int **a,int **b,int m,int n){
for (int i=0;i<m;++i)
for (int j=0;j<n;j++)
if(i<=j)b[j][i]=a[i][j];
}
PS:这里最好做个矩阵类。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有给b分配空间啊!
void display(int a,int b,int **c);
void swap(int **a,int **b,int x,int y);
int main()
{
int m,n,**a,**b;
cin>>m>>n;
a = new int *[m];
b = new int *[m];
for (int i=0;i<m;++i)
{
a[i]=new int [n];
b[i]=new int [n];
}
for( i=0; i<m; ++i) {
for(int j=0; j<n; ++j){
cin>>a[i][j];
cin>>b[i][j];
}
cout<<endl;
}
display (m,n,a);
swap(a,b,m,n);
display (n,m,b);
delete [] a,b;
return 0;
}
void display(int a,int b,int **c)
{
for (int i=0;i<a;++i){
for (int j=0;j<b;++j){
cout.width (4);
cout<<c[i][j];
}
cout<<endl;
}
}
void swap(int **a,int **b,int x,int y)
{
for (int i=0;i<x;++i){
for (int j=0;j<y;j++)
b[j][i]=a[i][j];
cout<<endl;
}
}
void display(int a,int b,int **c);
void swap(int **a,int **b,int x,int y);
int main()
{
int m,n,**a,**b;
cin>>m>>n;
a = new int *[m];
b = new int *[m];
for (int i=0;i<m;++i)
{
a[i]=new int [n];
b[i]=new int [n];
}
for( i=0; i<m; ++i) {
for(int j=0; j<n; ++j){
cin>>a[i][j];
cin>>b[i][j];
}
cout<<endl;
}
display (m,n,a);
swap(a,b,m,n);
display (n,m,b);
delete [] a,b;
return 0;
}
void display(int a,int b,int **c)
{
for (int i=0;i<a;++i){
for (int j=0;j<b;++j){
cout.width (4);
cout<<c[i][j];
}
cout<<endl;
}
}
void swap(int **a,int **b,int x,int y)
{
for (int i=0;i<x;++i){
for (int j=0;j<y;j++)
b[j][i]=a[i][j];
cout<<endl;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a = new int *[m];
下面加上一句
b=new int*[n];
然后在swap 改成:
void swap(int **a,int **b,int x,int y)
{
for (int i=0;i<y;++i)
b[i]=new int[x];
for (int i=0;i<x;++i){
for (int j=0;j<y;j++)
b[j][i]=a[i][j];
cout<<endl;
}
}
下面加上一句
b=new int*[n];
然后在swap 改成:
void swap(int **a,int **b,int x,int y)
{
for (int i=0;i<y;++i)
b[i]=new int[x];
for (int i=0;i<x;++i){
for (int j=0;j<y;j++)
b[j][i]=a[i][j];
cout<<endl;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询