繁体   English   中英

从文本文件创建向量的向量

[英]Creating vector of vectors from text file

我必须从文本文件创建向量的向量。 有问题的值是整数。

值是固定的3列,各行各不相同。 但是,我不认为这引起了我的问题。 我认为我遇到的主要问题是文本文件中的值未放入向量vector中。 相关代码如下:

ifstream infile("material_properties.txt");
if (!infile)
{
    cout << "File material_properties.txt not found." << endl;
    return -1;
}

int lines = 0;
string line;
while (getline(infile, line))
{
    ++lines;
}

vector< vector<int> > properties(lines,vector<int>(3));

while (getline(infile,line)) {

    for(int i=0; i < lines; i++){
        for (int j=0; j<4; j++){
            infile  >> properties[i][j];
        }
    }

}

我对编码非常陌生,非常困惑。

您需要倒回ifstream,添加:

infile.seekg(0);

在第二秒之前while (getline(infile,line)) {

这是因为当您读取文件时,指向当前文件位置的内部指针会增加。 它在第一个getline循环中递增到文件末尾,因此在第二个中需要倒带。

您的第二个错误是:

vector< vector<int> > properties(lines,vector<int>(3));

您可以在vector的向量中创建三个元素的vector,但是在读取循环中,请从文件中添加四个元素。 您应该将其更改为vector<int>(4)

第三个问题是您解析文件的方式。 在第二个循环中,您逐行读取文件,这表明您要解析它,但是您的代码实际上是错误的:

int i = 0;
while (getline(infile,line)) {
    // This actually makes no sense, you have read one line 
    //  which you should parse and put results into properties vector. 
    //for(int i=0; i < lines; i++){
    //    for (int j=0; j<4; j++){
    //        infile  >> properties[i][j];
    //    }
    //}    

    // parsing would look like this (depends on your input file):
    std::istringstream in(line);
    in >> properties[i][0] >> properties[i][1] >> properties[i][2];
    i++;
}

首先

while (getline(infile, line))
{
    ++lines;
}

将读入文件,直到到达文件末尾。 然后,当您再次从文件中读取文件时,您已经处在末尾,因此不会读取任何内容。 无需从文件中读取内容即可找到文件大小,您只需从文件中读取并将值输入向量即可。 当您向其中自动添加数据时,向量将增长。

ifstream infile("material_properties.txt");
vector< vector<int> > properties;
vector<int> row(3);
while (infile >> row[0] >> row[1] >> row[2])
{
    properties.push_back(row);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM