c++ - 读出一个大的txt文件

标签 c++

我想知道,是否有另一种方法可以读出一个大文件

Hans //name

Bachelor // study_path

WS10_11 //semester

22 // age 

不是这样的:

fout >> name; //string

fout >> study_path; //string

fout >> Semester ; //string

fout >> age; //int

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

还有别的办法吗?

最佳答案

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

class Person {
public:
    std::string name;
    std::string study_path;
    std::string semester;
    unsigned int age;
};

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

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

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

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

这将读取整个文件并将所有提取的记录存储在 vector 中。如果事先知道要读取的记录数,可以在读取文件前调用data.reserve(number_of_records)。因此, vector 将有足够的内存来存储所有记录而无需重新分配,如果文件很大,这可能会加快加载速度。

关于c++ - 读出一个大的txt文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4177680/

相关文章:

c++ - 不能取值对象 - C++

c++ - multimap 像拼接 - 添加第三个图像

c++ - 创建一个线程安全的标准映射

c++ - 在构造函数初始化列表中分配内存是否有任何问题?

c++ - 如何从数据库中读取 CLongBinary 字段并将其写入 CFile 对象?

c++ - 嵌套的 if-else 语句只执行一个条件 (C++)

c++ - 我需要在 pthread_mutex_destroy 之后使用 delete

c++ - 在这种情况下如何使用 NULL?

c++ - 编译时的整数值

c# - 使用 Win MMDevice API 使特定音频输入静音