Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
19 Июль 2025, 12:56:23
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Гродненский Форум > Компьютеры > Программирование > Тема: Re: HELP! C++ I/O
(Модераторы: Админ, barmalei) > Тема:

Сообщение #38159

Страниц  :   Вниз
  Печать  
Автор Тема: Re: HELP! C++ I/O  (Прочитано 4428 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ghostWhite
Настоящий гродненец
****

Репутация: +26/-0
Offline Offline

Пол: Мужской
Сообщений: 387


Просмотр профиля
« Ответ #0 : 09 Июнь 2005, 02:58:21 »

Ой трудный день сегодня был и если что простите Подмигивающий

1. Так злобно обходится с STL Vector (далее просто вектор) как вы, абсолютно нельзя, ну совсем нельзя. Помимо ваших любимых данных вектор содержит ну просто кучу всяких вспомогательных вещей начиная от аллокатора и заканчивая итераторами. Поэтому такая запись:

out.write((char*) &myVector, sizeof(myObject) * myVector.size());

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

in.read((char *) &myVector, size);

или

in.read((char *) &myVector, 156);

вы получите готовый объект класса std::vector мягко говоря верх наивности.

2. Если вы таки хотите сохранить содержимое вектора в двоичном файле, то делается это поэлементно и никак иначе. Для этого существуют итераторы и алгоритм for_each.

3. Если вы хотите сохранить некий сложный составной объект в файле то это опять же делается поэлементно. Т.е. вы сохраняете каждое поле вашего объекта поэлементно. И никак иначе. Если вы хотите красиво применить это в сочетании с пунктом 2 то для этого вам надо правильно перегрузить операторы << и >>. Тогда после этого вы сможете счастливо написать такое:

some_output_stream << my_complex_object;
some_input_stream >> my_complex_object;

4. STL строка, как это ни странно, тоже сложный объект и перед его сохранением в двоичный файл вместе с элементами других типов надо немного подумать головой.

5. Для того что бы правильно прочитать массив элементов из файла не мешало бы знать размер этого самого элемента и их количество перед операцией чтения.

6. C++ это не Java. Здесь нет понятия сериализации типа данных на уровне языка (в принципе и в Java не всё так радужно). Если вам нужна эта самая сериализация то придётся делать её ручками.
Записан

Не будите во мне зверя, он и так всё время не высыпается

Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2025, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,076 секунд. Запросов: 20.