前言
今天更新内容主要还是实现数组的变形,在Python中一个函数Reshape的事,在C++耗费了我两个多小时,可能是我C++基础差吧,
怪我大一,大二没好好学
。本次还有一个很重要的内容就是用C++的“new”创建动态数组,在上一篇C++文章中是用的C语言的“malloc”实现数组地址的动态分配,在一个就是用指针来对数组操作,这些很简单的操作,我还要在大三重新认识,惭愧至极,话不多说,直接上代码。
代码
/*
作者:山科_xxin
时间:2017-03-14 23:27:40
功能:数组变形,求数组极值及其下标
类别:C++数组练习
*/
#include
#include
#include
using namespace std;
int **random(int n,int m)
{
int t;
int **data;
t = time(0);
srand(t);
data=(int **)malloc(n*sizeof(int *));
for (int i=0;i
data[i]=(int *)malloc(2*sizeof(int));
for(int i = 0;i
{
for(int j = 0;j
{
data[i][j] = rand()%100;
}
}
return data;
}
int visit(int **data,int n,int m)
{
for(int i = 0;i
{
for(int j = 0;j
cout<
cout<
}
return 0;
}
int **reshape(int **data,int n,int m,int x,int y )
{
int k = 0;
int *midata = new int[n*m];
int **redata = new int *[x];
if (n*m!=x*y)
cout<
else
{
for( int i=0; i
{
redata[i] = new int[y] ;
}
int redata1[3][2];
for(int i = 0;i
{
for(int j = 0;j
{
k++;
*(midata+k) = data[i][j];
}
}
int k1 = 0;
/*
for(int i = 0;i
{
k1++;
cout<
//cout<
}
cout<
*/
int k2 = 0;
for(int ii = 0;ii
{
for(int jj = 0;jj
{
//cout<
//redata[ii][jj] = midata[ii*y+jj+1];
//cout<
redata[ii][jj] = midata[ii*y+jj+1];
//cout<
}
//cout<
}
}
for(int i = 0; i < x; i++)
return redata;
}
int *Max(int **data,int n,int m)
{
int maxv = -999;
int maxi = 0,maxj = 0;
int *max = new int[3];
for(int i = 0;i
{
for(int j = 0;j
{
if (data[i][j]>=maxv)
{
maxv = data[i][j];
maxi = i;
maxj = j;
}
}
}
*max = maxv;
*(max+1) = maxi;
*(max+2) = maxj;
return max;
}
int *Min(int **data,int n,int m)
{
int minv = 999;
int mini = 0,minj = 0;
int *min = new int[3];
for(int i = 0;i
{
for(int j = 0;j
{
if (data[i][j]<=minv)
{
minv = data[i][j];
mini = i;
minj = j;
}
}
}
*min = minv;
*(min+1) = mini;
*(min+2) = minj;
return min;
}
int main()
{
int n,m,x,y;
int maxv,minv;
cout<
cin>>n;
cin>>m;
int *min;
int *max;
cin>>x;
cin>>y;
int **data = random(n,m);
int **redata = reshape(data,n,m,x,y);
cout<
visit(data,n,m);
cout<
visit(redata,x,y);
min = Min(data,n,m);
max = Max(data,n,m);
cout<
cout<
system("pause");
return 0;
}
演示
main函数
运行结果
注:生成3*6的随机数组,变形为9*2数组,求原数组的最大值,最小值,并返回其坐标。
后语
用C++写一个图像处理算法,肯定是一个庞大的工程,用解释性语言,比如Python,能轻松处理数组,使你更专注于算法的实现,但是C语言速度更快,比如说C语言0.001s完成的任务,Python可能需要0.1s,但是你基本察觉不出来,并且C++还有编译的过程,而Python直接运行。
xxin blog , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++中实现数组变形,求极值并返回其行列号!