Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Vector в файл


Автор: VSB 20.8.2012, 23:05
Есть std::vector<SimpleStruct>
SimpleStruct - простая структура без выравнивания (точнее, определена через #pragma pack(1)), размером до 32 байт (три немного разых случая).
Длина вектора обычно от 50000 до 500000 элементов.
Нужно этот вектор записать в файл и потом прочитать его.
Как это сделать по-быстрее?

Автор: boostcoder 20.8.2012, 23:21
Код

struct type {};

std:vector<type> vec;

...

std::ofstream file(...);
file.write(reinterpret_cast<const char*>(&vec[0]), vec.size()*sizeof(type));


читать по аналогии.

Автор: VSB 21.8.2012, 07:28
boostcoder, то есть никаких хитрых указателей, разных при каждом выполнении программы, в vector нет?

Автор: borisbn 21.8.2012, 08:30
> читать по аналогии
ну... не совсем. Сначала нужно узнать размер файла, потом разделить на размер типа, затем сделать вектору resize(), а затем уже
f.read( &v[ 0 ], ...

> то есть никаких хитрых указателей, разных при каждом выполнении программы, в vector нет? 

Если в векторе хранятся сами структуры, а не указатели, то тебя не должно волновать, что там происходит с памятью от запуска к запуску. Хотя... если и указатели, то тоже не должно. Запись и чтение только будут по-другому 

Автор: disputant 21.8.2012, 08:34
Цитата(VSB @ 21.8.2012,  07:28)
boostcoder, то есть никаких хитрых указателей, разных при каждом выполнении программы, в vector нет?

Куда важнее, чтоб их не оказалось в SimpleStruct smile

Автор: boostcoder 21.8.2012, 22:06
Цитата(borisbn @  21.8.2012,  08:30 Найти цитируемый пост)
Сначала нужно узнать размер файла, потом разделить на размер типа, затем сделать вектору resize(), а затем уже
f.read( &v[ 0 ], ...

это же вроде как очевидно.

Автор: Randajad 22.8.2012, 00:02
А писать-то в файл вроде как тоже очевидно, тем не менее афтар создал тему. smile

Автор: boostcoder 22.8.2012, 00:34
Цитата(Randajad @  22.8.2012,  00:02 Найти цитируемый пост)
писать-то в файл вроде как тоже очевидно

если размышлять так, то и программы писать очевидно. но темы все равно создают.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)