我用C ++写下了这段代码,以从文件中读取2D数组。现在,我想用函数更好地组织代码。我遇到的问题是我无法弄清楚如何将加载到内存的2D数组传递给同一程序中的另一个函数。 这是我需要组织成函数的代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#define M 4
#define N 4
int main(){
int i, j;
float A[M][N];
string line;
ifstream matrix("matrix.txt");
if (matrix.is_open())
{
do
{
for(i=0; i<M; i++)
{
for(j=0; j<N; j++)
matrix >> A[i][j];
}
}
while (getline(matrix,line));
matrix.close();
}
else cout << "Unable to open file";
float sumline[M]={0};
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
sumline[i]+=A[i][j];
}
float sumcolumn[N]={0};
for(j=0;j<N;j++)
{
for(i=0;i<M;i++)
sumcolumn[j]+=A[i][j];
}
for (i=0; i<M; i++){
for (j=0; j<N; j++){
if(sumline[i]<sumcolumn[j]){
cout << "Error, total sum of column "<<j<<" is greater than the sum of the line"<<i<<endl;
return 0;
}
}
}
int mincol=sumcolumn[0];
for (i=0; i<N; i++){
if(mincol>sumcolumn[i])
mincol==sumcolumn[i];
}
float avgline = 0.0;
for (i=0; i<M; i++){
avgline=avgline+sumline[i];
}
avgline = avgline/M;
if (avgline * 3 > mincol) {
cout << "Conditions verified"<<endl;
}
else{
cout << "Error, triple of the avg of line is less than the lowest sum of column"<<endl;
return 0;
}
return 0;
}
代码基本上在2D数组上进行一些数学运算。我还想保持尽可能简单,即使using namespace std;
并不是很好的做法,或者我从文件中读取数组的方式实际上是基本的,我也需要这样。非常感谢。
答案 0 :(得分:2)
代替使用c数组
float A[M][N];
您可以改用
using MyArrayType = std::array<std::array<float>, M>, N>;
MyArrayType A;
现在您可以按引用传递(MyArrayType&
或const MyArrayType&
)
话虽如此:可以像更困难的语法(float (&a)[M][N]);
一样传递c数组-强烈建议在可能的地方改用std::array
。