C ++如何将数据文件读取到struct或vector并返回struct或vectors?

问题描述 投票:-3回答:1

我已经在MATLAB中做过这个并想用C ++做。我想要读取的文件看起来类似于:

0,397   0,372   0,385   0,354   0,397   0,384
0,389   0,347   0,385   0,317   0,397   0,380
0,379   0,308   0,381   0,285   0,395   0,361

由于数据表示为我必须选择存储它的方式。我创建了一个名为OrlData的类,它应该有一个读取文本文件的函数,并将数据放入数组或结构中,如:

struct DATA
{
  float a[400];
  string line;
} orldata[1200];

这个结构应该像普通数组一样工作,orldata [1] .a [2] = 0,347等等。但是在寻找更好的解决方案时,我认为返回数组是不好的做法,使用向量会更好。 (但我没有真正取得突破,所以我继续结构)

我的代码如下,实际上正在运行。这不是在Class OrlData中实现的,并且直到现在都是主要的。它将文件加载到struct orldata中:

 struct DATA
 {
     float a[400];
     string line;

 } orldata[MAX];


int main()
{
   int counter = 0;
   int index = 0;
   std::string Filename = "orl/orl_data.txt";
   std::ifstream input(Filename);
   std::string line;

   while (std::getline(input, line)) {
      counter++;
      orldata[counter].line = line;

   }
   for (int i = 0; i < MAX; i++) {
       std::istringstream iss(orldata[i].line);
       for (std::string s; iss >> s; ) {
           orldata[i].a[index] = strtof((s).c_str(), 0);
           index++;
       }
       index = 0;
   }
   std::cout << orldata[2].a[5];

   return 0;
  }

但是,当我尝试将此代码放入一个应该返回结构的函数时,它崩溃了:

DATA ORLData::create_orl_data() {
   DATA orldata[1200];
   ....
   return orldata[1200];
}

...
int main(){
   ORLData orltemp;
   ORLData::DATA orlstruct = orltemp.create_orl_data();
   ....
}

到目前为止,我理解返回这样的struct数组是不好的做法。我了解到使用向量更好,但我还没弄明白如何将它们用作矩阵。

所以我的问题可以归结为:我想从一个看起来像上面的文本文件中读取,然后将它们加载到数组[0] .a [2]中,它应该存储所有数据。我怎样才能做到这一点?

请问您是否希望我详细说明我遇到的问题。

c++ arrays vector struct
1个回答
1
投票
DATA ORLData::create_orl_data() {
   DATA orldata[1200];
   ....
   return orldata[1200];
}

在几个帐户上是错误的。

  1. 它只能返回数组的一个元素。
  2. orldata指数的有效范围是0-1199。 return orldata[1200]使用越界索引访问数组,并导致未定义的行为。在您的情况下,这会导致崩溃。

更改该函数以返回std::vector<DATA>

std::vector<DATA> ORLData::create_orl_data() {
   std::vector<DATA> orldata;
   ....
   return orldata;
}
© www.soinside.com 2019 - 2024. All rights reserved.