c++ - 从文本文件创建 vector vector

标签 c++ text vector

我必须从一个文本文件创建一个 vector vector 。所讨论的值是整数。

这些值是具有不同行的固定 3 列。但是,我认为这不会导致我的问题。我认为我遇到的主要问题是文本文件中的值没有被放入 vector 的 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 of 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++;
}

关于c++ - 从文本文件创建 vector vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34027618/

相关文章:

c++ - C++ 中的对称矩阵

c++ - 如何获取包含NULL字符的shellcode字符串的长度

c++ - 为什么在重新分配小块内存时分配大块内存失败

search - 如何在 vim 中编辑搜索文本?

c++ - 如何找到 vector 中重复的元素

c++ - 如何修复已定义的类模板?

regex - 替换大日志文件中的字符

jQuery Mobile 中的搜索框在焦点上变空,仅当它为空且失去焦点时才恢复为默认文本?

c++ - 检查到目前为止我在 C++ 中使用了哪些值的最快方法是什么?

r - 根据第一个对第二个向量重新排序