函数,返回多个数组

function which returns multiple arrays

本文关键字:数组 返回 函数      更新时间:2023-10-16

我想写一个C++函数,它读取一个文件(例如一个有2列或更多列的表),并将每列作为数组返回。我该怎么做?如何从主程序中的这个函数中读取数组?

我可以对一个有1列(1个数组)的文件执行此操作,这样函数就会返回一个指针。但是,我如何返回许多数组(或指向这些数组的指针),然后在主程序中读取它们呢?

示例"table.txt":

1 10
2 20
3 30
4 40
5 50

看起来您拥有的是键值对。最好的做法是从函数中返回一个std::map。以下是它的样子:

std::map<int, int> parseFile()
{
}

在解析文件时,将键值对作为std::对添加到std::映射中。

您可以使用包含向量的向量。基本上,您可以将每一行分解为适当的单词,并将它们推到向量容器中相应列的右向量上。

在调用程序中声明数组,并通过参数传入。

void fill(int *a, int *b, int *c) {
  a[0] = b[0] = c[0] = 1;
  //...
}
void func() {
  int a[10], b[10], c[10];
  fill(a, b, c);
  //...
}

或者,您可以定义一个具有所有元素类型的结构,并返回这些结构的单个数组。

由于您谈论的是指针(在我看来,比C++更像C…),您可以返回相同的单个指针,但该指针必须指向包含两个数组指针的结构。

类似于:

typedef struct _two_arrays{
 /*Assuming it is an array of ints*/
 int *arr_1; 
 int *arr_2;
}TwoArr;
TwoArr *yourFunction(/*Argss*/){
  TwoArr *arrs = (TwoArr*)malloc(sizeOf(TwoArr));
  /*Columns to your arrays ...*/
  arrs->arr_1 = yourArr1;
  arrs->arr_2 = yourArr2;
  return arrs; 
}

或者,以c++的方式,您可以使用std::vector<std::vector<YOUR_TYPE>>

我假设您是C++新手。矢量是一种数据结构,您可以使用它来代替数组。您可以在此处找到更多信息[]http://www.cplusplus.com/reference/vector/vector/.在不使其复杂化的情况下,您可以在主函数中声明两个向量cloum1和column2(您可以将它们视为无限大小的数组),并调用loadMatrixFromFile,如下所示:

    vector<int>  column1,vector<int>  column2;
    if(!loadMatrixFromFile(inputFile,column1,column2))
    {
            cerr << "Uh oh, failed in loading matrix form file" << endl;
            exit(1);
    }

并创建如下函数:

    bool loadMatrixFromFile(ifstream & inputFile,vector<int> & col1,vector<int> & col2)
    {
      while (inputFile)
       {
            string line;
            getline(inputFile,line);
                    int n;
                    stringstream tempLine(line);
                    for (int i=0;i<2;i++)
                    {
                            tempLine>>n;
                            if (i==0)
                                col1.push_back(n);
            else
                col2.push_back(n);
                    }
       }
    return true;
    }

执行该函数后,向量column1和column2将包含文件中的列值。

如果您对使用向量感到满意,那么您可以使用向量中的向量(如数组中的向量)来创建可以容纳每列向量的向量,而不是为每列声明一个向量。