Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Как записать vector в файл  (Прочитано 45442 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #30 : 06-07-2006 12:21 » 

Цитата
Какие я вижу пути решения:
1. Использовать указатель char * (он же массив)
Недостаток: потребуестя периодически менять размер выделенной под него памяти, т.е. делать realloc.

2. Использовать vector
Недостаток: неудобно сохранять его в файл (надо делать цикл).

3. Искать другие пути
Пока не знаю, что: другие классы C++ или еще что-нибудь

Как-то бросилось в глаза соотношение пунктов 1 и 2... А кто сказал, что для вектора этого не понадобится? Особенно с учетом обсуждения, что vector из STL хранит данные последовательно.
Ему еще как надо будет переаллоцировать память, если в него все "не влезает". Либо резервировать опять же придется кусок неизвестного заранее (читай большого) размера Улыбаюсь
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #31 : 07-07-2006 09:01 » 

Цитата: Михалыч
Ему еще как надо будет переаллоцировать память, если в него все "не влезает". Либо резервировать опять же придется кусок неизвестного заранее (читай большого) размера
Дело в том, что он это делает автоматически - не нужно реализовывать это вручную самому программисту.

И в этом противоречие: с одной стороны автор темы декларирует желание сделать оптимально по скорости и памяти, с другой - элегантно с точки зрения архитектуры. При этом из содержания задачи, как я понял, приоритет одного над другим не очевиден. Я в таких случаях выбираю элегатность кода - чтобы потом его можно было бы легко понять и модифицировать. Времена жутких дефицитов вычислительных ресурсов и замысловатых, зато оптимальных кодов "ad hoc" уже прошли - настали времена сложных программных решений, в которых главное - ясность и удобность архитектуры, максимум повторно используемого кода и минимум затрат ручного труда. Но если задача требует того, приходится иногда приносить в жертву удобство, модифицируемость и расширяемость архитектуры программы ради оптимизации по использованию ресурсов.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #32 : 07-07-2006 12:05 » 

Цитата
Но если задача требует того, приходится иногда приносить в жертву удобство, модифицируемость и расширяемость архитектуры программы ради оптимизации по использованию ресурсов.
Мой профессиональный случай. Микроконтроллеры Улыбаюсь Для них "времена жутких дефицитов вычислительных ресурсов" не прошли пока Улыбаюсь Хотя жить стало намного проще и веселее Улыбаюсь
Не далее, как неделю назад беседовал с одним молодым специалистом. Был и долгий разговор о "вкусностях" и современностях С++. Все бы хорошо... Только он слишком безапеляционно ратовал за STL. Дал я ему для удовлетворения любопытства небольшую программу, в которой все было написано с использованием динамически выделяемых массивов. Никаких векторов, никокой STL. И попросил - на, перепиши все это, вместо массивов - вектора и списки, что тебе удобней, то и воткни...Молодец, переделал быстро и качественно. Благо не очень трудно было. Надо было видеть, насколько широко были вытаращены его глаза, когда он получил результат после компиляции Улыбаюсь Объем исполняемого кода вырос в 1,83 раза Улыбаюсь Почти в 2... Естественно, ради чистоты эксперимента в обоих случаях компилировалось все без какой-либо оптимизации. Однако, он этого не ожидал. Почему? Не знаю Улыбаюсь  На вопрос, а не хочет ли он заодно убедиться во сколько раз упадет эффективность работы программы, он ответил - я пока подумаю Улыбаюсь
Я все это к чему веду - я бы тоже с огромным удовольствием выбрал бы элегантность кода, да жизнь не позволяет иногда. Приходится сочинять собственные "элегантные" решения Улыбаюсь Это я уже к решению, которое предлагал acc15.
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #33 : 07-07-2006 16:52 » 

Цитата: Михалыч
Я все это к чему веду - я бы тоже с огромным удовольствием выбрал бы элегантность кода, да жизнь не позволяет иногда. Приходится сочинять собственные "элегантные" решения
Угу. Только автор так и не сознался, какую прикладную задачу и на каком железе решает. А откуда упомянутые тобой молодые люди берутся - не знаю. Не люблю экстремизм и абсолютизм Улыбаюсь.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #34 : 07-07-2006 18:06 » 

Кто же их любит? Улыбаюсь А молодых людей полно всяких повидалось Улыбаюсь Этот конкретный - из другого отдела, у себя таких не держим Улыбаюсь За автора не скажу, а мне зачастую приходится иметь дело с железом например таких характеристик - микроконтроллер 5066 Octagon Systems -проц. AMD 5х86/133 МГц, ОЗУ - 4 Мб, 1-2Мб бортовой флэш... Особо и не разбежишься Улыбаюсь И это еще не самый дохлый вариант Улыбаюсь
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #35 : 08-07-2006 06:28 » 

PS Кстати, Anchorite, sizeof(char) всегда 1.  Ага

Конечно 1 Улыбаюсь
Просто я привел пример в общем виде, что бы было понятнее Улыбаюсь



sizeof(char) не всегда 1, он не меньше одного, это явно описано в стандарте, сказано что он достаточне для хранения минимального набора символов
Записан

Странно всё это....
acc15
Гость
« Ответ #36 : 10-07-2006 15:01 » 

LogRus ты ошибся.
Я думаю слова Страуструпа можно считать стандартом.
Цитата
1==sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)
« Последнее редактирование: 10-07-2006 15:03 от acc15 » Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #37 : 10-07-2006 16:54 » 

LogRus ты ошибся.
Я думаю слова Страуструпа можно считать стандартом.
Цитата
1==sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)

 Улыбаюсь
можно, но специально смотрел раздел 3.9.1 так сказано что не меньше чем необходимо. и также сказано, что специфично для реализации.
НО я допускаю, что ничего не понимаю в англицком языке. Ага
Дома к сожалению нет стандарта, так-что процитировать не могу.
Записан

Странно всё это....
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #38 : 10-07-2006 18:13 » 

Цитата: LogRus
Дома к сожалению нет стандарта, так-что процитировать не могу.
К сожалению, имею лишь вторую редакцию стандарта от 2003 года.
Цитата: ISO/IEC 14882:2003(E) - 3.9.1
Objects declared as characters (char) shall be large enough to store any member of the implementation's basic character set. If a character from this set is stored in a character object, the integral value of the character object is equal to the value of the single character literal form of that character. It is implementation-defined whether a char object can hold negative values.
и далее
Цитата: ISO/IEC 14882:2003(E) - 3.9.1
There are four signed integer types: "signed char", "short int", "int", and "long int." In this list, each type provides at least as much storage as those preceding it in the list. Plain ints have the natural size suggested by the architecture of the execution environment; the other signed integer types are provided to meet special needs.
Если опечаток не сделал - так.

Таким образом, вышеприведённое неравенство от луквого, т.е. Страуструпа. Ему никто не мешает иметь частное мнение, но компиляторы создаются согласно стандарту.
« Последнее редактирование: 06-12-2007 18:48 от Алексей1153++ » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
LP
Помогающий

ru
Offline Offline

« Ответ #39 : 12-07-2006 08:21 » 

LogRus, смотри параграф 5.3.3/1 Улыбаюсь
Цитата
sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1; the
result of sizeof applied to any other fundamental type (3.9.1) is implementation-defined.

Насколько я знаю, по отношению к char, implementation-defined количество бит. Т.е. оно может быть 8, 9 и более. Думаю, именно это и имелось в виду в 3.9.1., но в любом случае sizeof char'a всегда 1.
« Последнее редактирование: 06-12-2007 18:49 от Алексей1153++ » Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines