Чтение отформатированных строк из stringstream
Для загрузки большого количества вершин из текстового файла я загружаю весь файл в память, а затем я хотел бы отсканировать каждую строку на наличие трех чисел с плавающей запятой. Следующие работы, но я хотел бы знать, хорошо это или расточительно.
std::stringstream sstr;
sstr << file.rdbuf(); // file is an ifstream
for (uint i=0; i<num_verts; ++i)
{
sstr.getline(line, bufsz);
std::istringstream iss(line);
iss >> verts[i].x >> verts[i].y >> verts[i].z;
}
На справочном сайте cplusplus.com я нашел следующее дляistringstream
:
(2) Конструктор инициализации: Создает объект istringstream с копией str в качестве содержимого.
Так что еслиistringstream
действительно копирует каждую строку при создании, тогда это очень расточительно, тем более, что у меня уже есть поток строк во-первых.
По сравнению сsscanf
вышеупомянутое действительно довольно медленно: 1,94 секунды против 0,56 сsscanf
.
Копируется ли строка при инициализацииiss
?
Как можно прочитать отформатированные значения, одновременно продвигаясь по строке по строке только с потоком строк?
Или менее конкретно: какой метод C ++ для описанного выше случая одинаково хорошо работает, какsscanf
?