覆盖`istream operator >>`vs使用`sscanf`

Ale*_*yan 1 c++ scanf istream

说我想初始化一些std::vector对象,例如

class Person { int ID; string name; ...}

从包含每个对象的行的文件.一条路线,就是覆盖operator>>而简单地说std::cin>>temp_person,另一条路线- 我曾经赞成的是使用sscanf("%...", &...)一堆临时原始类型而且简单.emplace_back(Person(temp_primitives...).

哪种方式可以实现最快的运行时忽略内存占用?mmap()整个文件中有什么意义吗?

das*_*ght 9

由于您正在读取文件,因此性能将受I/O限制.几乎无论你在记忆中做了什么,对整体性能的影响都无法被发现.

我更喜欢这operator>>条路线,因为这会让我使用C++的输入迭代器习语:

std::istream_iterator<Person> eos;
std::istream_iterator<Person> iit(inputFile);
std::copy(iit, eos, std::back_inserter(person_vector));
Run Code Online (Sandbox Code Playgroud)

甚至

std::vector<Person>   person_vector(
    std::istream_iterator<Person>(inputFile)
,   std::istream_iterator<Person>()
);
Run Code Online (Sandbox Code Playgroud)