Скажем, я хотел инициализировать std::vector
объектов, например.
class Person { int ID; string name; ...}
из файла, который содержит строку для каждого объекта. Один путь состоит в том, чтобы переопределить operator>>
и просто std::cin>>temp_person
, другой, который я предпочитал, заключается в использовании sscanf("%...", &...)
набора временных примитивных типов и просто .emplace_back(Person(temp_primitives...)
.
Какой способ обеспечивает самое быстрое время выполнения без учета объема памяти? Есть ли смысл mmap()
ировать весь файл?
sscanf/fscanf
, возможно, немного быстрее, но это может быть несущественно. Попробуйте и узнайте разницу. - person R Sahu   schedule 09.08.2018mmap
, см. мои ответы: улучшает ли mmap скорость чтения файлов"> stackoverflow.com/questions/37172740/ и многое другое: stackoverflow.com/questions/33616284/ - person Craig Estey   schedule 09.08.2018operator>>
во многом определяет синтаксис ее вызова. Если вы хотите реализовать это с помощьюscanf
, это довольно просто сделать. Другими словами, на самом деле это не ситуация «или-или». Вы можете сделать один или оба, как считаете нужным. - person Jerry Coffin   schedule 09.08.2018sscanf
не имеет спецификаторов формата дляstd::string
. - person Thomas Matthews   schedule 09.08.2018std::cin
и>>
, не перегружая оператор>>
. Просто прочитайте временный объект и поместите его в вектор, как вы делаете сsscanf
. С тем же успехом можно придерживаться ввода-вывода С++, если вам не нужно использовать ввод-вывод C. - person BessieTheCookie   schedule 09.08.2018std::ios::sync_with_stdio(false);
- person Martin York   schedule 09.08.2018