我有一个包含值的文本文件,我想将它们放入2D矢量中。
我可以用数组来做,但我不知道如何使用向量。
矢量大小应该像vector2D [nColumns] [nLines],我事先并不知道。我最多可以在文本文件中包含列数,但不包括行数。 列数可能不同,从一个.txt文件到另一个。
.txt示例:
189.53 -1.6700 58.550 33.780 58.867
190.13 -3.4700 56.970 42.190 75.546
190.73 -1.3000 62.360 34.640 56.456
191.33 -1.7600 54.770 35.250 65.470
191.93 -8.7500 58.410 33.900 63.505
使用数组我这样做:
//------ Declares Array for values ------//
const int nCol = countCols; // read from file
float values[nCol][nLin];
// Fill Array with '-1'
for (int c = 0; c < nCol; c++) {
for (int l = 0; l < nLin; l++) {
values[c][l] = -1;
}
}
// reads file to end of *file*, not line
while (!inFile.eof()) {
for (int y = 0; y < nLin; y++) {
for (int i = 0; i < nCol; i++) {
inFile >> values[i][y];
}
i = 0;
}
}
答案 0 :(得分:2)
而不是使用
float values[nCol][nLin];
使用
std::vector<std::vector<float>> v;
你必须#include<vector>
。
现在您不必担心尺寸。
添加元素就像
一样简单 std::vector<float> f; f.push_back(7.5); v.push_back(f);
也不要在流上使用.eof()
,因为直到达到结束后它才会设置它,因此它会尝试读取文件的结尾。
while(!inFile.eof())
应该是
while (inFile >> values[i][y]) // returns true as long as it reads in data to values[x][y]
注意:您也可以使用vector
代替std::array
,这显然是切片面包后的最佳选择。
答案 1 :(得分:1)
我的建议:
const int nCol = countCols; // read from file
std::vector<std::vector<float>> values; // your entire data-set of values
std::vector<float> line(nCol, -1.0); // create one line of nCol size and fill with -1
// reads file to end of *file*, not line
bool done = false;
while (!done)
{
for (int i = 0; !done && i < nCol; i++)
{
done = !(inFile >> line[i]);
}
values.push_back(line);
}
现在您的数据集包含:
values.size() // number of lines
并且也可以使用数组表示法(除了使用迭代器):
float v = values[i][j];
注意:此代码未考虑最后一行可能具有较少nCol数据值的事实,因此行向量的末尾将在文件末尾包含错误的值。在将其推入值之前,您可能希望添加代码以在完成变为false时清除线矢量的结尾。