首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从文本文件创建向量向量

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

Stack Overflow用户
提问于 2015-12-01 18:36:01
回答 2查看 2.1K关注 0票数 1

我必须从文本文件中创建向量向量。所讨论的值是整数。

这些值是一个固定的3列,具有不同的行。不过,我不认为这会引起我的问题。我认为我遇到的主要问题是,文本文件中的值没有被放入向量的向量中。有关守则如下:

代码语言:javascript
运行
复制
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];
        }
    }

}

我对编码很陌生,也很困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-01 18:46:39

一开始

代码语言:javascript
运行
复制
while (getline(infile, line))
{
    ++lines;
}

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

代码语言:javascript
运行
复制
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);
}
票数 0
EN

Stack Overflow用户

发布于 2015-12-01 18:43:35

您需要倒带您的ifstream,添加:

代码语言:javascript
运行
复制
infile.seekg(0);

在你的第二个while (getline(infile,line)) {之前

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

你的第二个错误是在;

代码语言:javascript
运行
复制
vector< vector<int> > properties(lines,vector<int>(3));

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

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

代码语言:javascript
运行
复制
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++;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34027618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档