读出一个大的txt文件

dem*_*ing 0 c++

我想知道,如果有另一种方法来读出一个大文件

Hans //name

Bachelor // study_path

WS10_11 //semester

22 // age 
Run Code Online (Sandbox Code Playgroud)

而不是这样的:

fout >> name; //string

fout >> study_path; //string

fout >> Semester ; //string

fout >> age; //int
Run Code Online (Sandbox Code Playgroud)

当我的文件变成超过20行时,我应该制作20多个fouts?

还有另外一种方法吗?

Bjö*_*lex 10

您可以定义一个类来保存每个人的数据:

class Person {
public:
    std::string name;
    std::string study_path;
    std::string semester;
    unsigned int age;
};
Run Code Online (Sandbox Code Playgroud)

然后,您可以为该类定义流提取运算符:

std::istream & operator>>(std::istream & stream, Person & person) {
    stream >> person.name >> person.study_path >> person.semester >> person.age;
    return stream;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样阅读整个文件:

std::ifstream file("datafile.txt");
std::vector<Person> data;
std::copy(std::istream_iterator<Person>(file), std::istream_iterator<Person>(),
          std::back_inserter(data));
Run Code Online (Sandbox Code Playgroud)

这将读取整个文件并将所有提取的记录存储在a中vector.如果您知道提前读取的记录数,可以data.reserve(number_of_records)在阅读文件之前致电.因此,向量将具有足够的内存来存储所有记录而无需重新分配,如果文件很大,这可能会加速加载.

  • 除非你需要处理未出生的学生,否则我会把年龄称为"未签名". (4认同)