从文件中读取2D数组并将其传递给另一个函数

时间:2019-07-02 08:03:56

标签: c++ function multidimensional-array

我用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;并不是很好的做法,或者我从文件中读取数组的方式实际上是基本的,我也需要这样。非常感谢。

1 个答案:

答案 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