我已经在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]中,它应该存储所有数据。我怎么能这样做?
请问您是否希望我详细说明我遇到的问题。
答案 0 :(得分:1)
DATA ORLData::create_orl_data() {
DATA orldata[1200];
....
return orldata[1200];
}
在几个帐户上都是错误的。
orldata
索引的有效范围是0-1199。 return orldata[1200]
使用out of bounds索引访问数组,并导致未定义的行为。在您的情况下,这会导致崩溃。更改该功能以返回std::vector<DATA>
。
std::vector<DATA> ORLData::create_orl_data() {
std::vector<DATA> orldata;
....
return orldata;
}