Это после работы, так как полторы недели ипался с админкой на флексе, которая была паписана хер знает как недавно уволенным программистом. Вот он тоже не гладя в мануал херачил все данные в эррей коллекшены, не думая совершенно, нужны емы эвенты, не нужны… Херня, что у менеджеров, для которых все это писалось дохлые компики на атомах, и при загрузке сотни другой записей все начинает дико тормозить. А проблема оказалась именно в том, что ArrayCollection во флексе расширяет эвент диспатчер и при любом чихе, коллекция срёт кучей эвентов в очередо событий, как оказалось Vector в экшен скрипте на два где-то порядка шустрее работает, вот я эту куйню перелопачивал, а ты под горячую руку вместе с бустом попал, не принимай близко к сердцу xD
Азы это понимание как работает си с памятью - человек должен понимать, что std::vector.begin() - это итератор, то есть объект который внутрях своих где-то ссылается на сам вектор, либо на массив данных в векторе, в зависимости от реализации, что манипулировать с ним это манипулировать только одним единственным элементом. Что функция fwrite принимает первым аргументом указатель на область памяти, из которой будет скопированы данные в файл, и что если тебе нужно задампить массив данных, то нужно передвать указатель именно на массив.
Использование буста для сериализации не самый плохой метод, но ты знаешь как он работает? Ты уверен в том, что после того как ты в структуре Dis поля местами поменяешь, либо добавишь новое свойство, у тебя старые сериализованные файлы будут адекватно считываться?
По поводу записи, был пердложен метод, но ту его телегой обозвал ) Если ты пишешь приложение не только для себя, то он на мой взгляд единственно верный, при условии что нужно именно в файл писать. Если не обязательно лить данные в файл, я бы подумал не писать ли их в бд. Запись последовательно в определённом формате (который ты собственно сам должен придумать), с указанием сигнатуры текущей версии файла, гарантирует тебе:
а) отсутствие оверхеда
б) в будущем отсутствие гемора с обратной совместимостью
в) ты точно будешь знать как что работает, а не так, что звонят девочкам в тп со словами "У меня файл не загружается в новой версии", они тебя спрашивают, что случилось, на что ты им ответишь, "а хз, сериализация в бусте так работает"
Ещё. Если пишешь на плюсах, бы ло бы неплохо юзать всётаки стримы, а не f* функции и классы вместо структур. Создаёшь класс Discipline учишь его работать с std::istream и std::ostream, после чего для записи в файл нужно будет только написать (это я так, структура файла должна быть удобочитаемой для программы, это не руководство к действию =)) что-то типа:
void save(const std::vector<Discipline> &data) {
ofstream outFileStream("save.bin");
std::vector<Discipline>::const_iterator i;
for (i = data.begin(); i != data.end(); ++i) {
outFileStream << (*i);
}
outFileStream.flush();
outFileStream.close();
}
Work, buy, consume, die