c++ 动态二维数组问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 13:50:56
//功能:创建一个动态的二维数组并初始化,将数组中元素行列都进行由小到大排列后输出
#include <iostream>
using namespace std;
int main()
{int **p,row,col,i,j,k,temp; cin>>row>>col;
p=new int *[row];for(i=0;i<row;i++) p[i]=new int [col];//创建二维数组
for(i=0;i<row;i++)
for(j=0;j<col;j++) cin>>p[i][j]; //初始化二维数组

/*for(i=0;i<row;i++) //行冒泡排序,
{for(j=0;j<col-1;j++)
for(k=0;k<col-j;k++)
{
if(p[i][k]<p[i][k+1])//"<"则编译通过且运行正确,">"则运行错误
{temp=p[i][k+1];
p[i][k+1]=p[i][k];
p[i][k]=temp;}
}
}*/

for(i=0;i<col;i++) //列冒泡排序 ,编译也通过, 但是运行不起来.
{for(j=0;j<row-1;j++)
for(k=0;k<row-j;k++)
{
if(p[k][i]<p[k+1][i])
{temp=p[k+1][i];
p[k+1][i]=p[k][i];
p[k][i]=temp;}
}
}

//for(i=0;i<row;i++)
//{cout<<endl;
//for(j=0;j<

p=new int [row*col];//创建二维数组

二维和一维并没有本质上的区别,都是占用连续内存地址,所以创建的时候注意分配足够的空间就可以了,访问既可以用 p[i][j]这样的二维方式,也可以用p[k]这样的一维方式。所以排序的时候把它当作一维数组排列就ok

PS:删除的时候用 delete[] p; 就行了。