说我想初始化std::vector
个对象,例如
class Person { int ID; string name; ...}
,该文件包含每个对象的一行。一种途径是覆盖operator>>
并仅覆盖std::cin>>temp_person
,另一种途径-我曾经倾向于使用sscanf("%...", &...)
一堆临时基元类型,而仅覆盖.emplace_back(Person(temp_primitives...)
。
哪种方法可以实现最快的运行时忽略内存占用? mmap()
整个文件有什么意义吗?
答案 0 :(得分: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));
甚至
std::vector<Person> person_vector(
std::istream_iterator<Person>(inputFile)
, std::istream_iterator<Person>()
);