Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Классы: как правильно заполнить std::vector? 
V
    Опции темы
mrbrooks
Дата 23.3.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(Anikmar @  23.3.2009,  16:08 Найти цитируемый пост)
Не рекомендуется использовать vector<TDateTime> потому, что это может привести к таким-то отрицательным моментам:.......

Сейчас пролистываю мануал в поисках - в чем же загвоздка совместного использования - найти не нашел - но строгие указатели применяются авторами к объектам VCL на лево и на право.  smile

Добавлено через 57 секунд
Цитата(vinter @  23.3.2009,  16:12 Найти цитируемый пост)
еретик   smile  

 smile 
PM MAIL   Вверх
mes
Дата 23.3.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Anikmar @  23.3.2009,  15:08 Найти цитируемый пост)

Проведу аналогию (господи, только бы к баяну не привел мой пример), использовать конструкцию while(true){..... только чтобы вместо goto использовать break. 

Поверь, это не из за "боязни" использoвать goto.



--------------------
PM MAIL WWW   Вверх
Anikmar
Дата 23.3.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата

mrbrooks
Сейчас пролистываю мануал в поисках - в чем же загвоздка совместного использования - найти не нашел - но строгие указатели применяются авторами к объектам VCL на лево и на право.  


Думаю все дело в конкретных случаях. Ведь молотком надо гвозди забивать, но с дури можно и шурупы. Просто надо четко предстовлять себе как работает vector, сколько он сделает вызовов конструктора копирования, сколько создаст временных объектов и т.п.

Достаточно много примеров неумелого использования шаблонов, а потом авторы кричат - полная лажа этот STL. А на самом деле просто неправильно пользуются. Лично видел один код, когда автор потратил уйму времени на создание конструкторов копирования, операторов присваивания для класса,  котором было больше полусотни полей, причем часть из них стркутуры. Когда он все это запихал в вектор, да еще размером больше 100 тысяч элементов и получил ужасающие тормоза, он начал кричать, что STL писали полные ламеры и никакой оптимизации алгоритмов там нет. Он очень удивился, когда узнал, что через указатели все это делается гораздо проще и летает круче самолета.

Добавлено через 3 минуты и 31 секунду
 smile 
Цитата

mes
Поверь, это не из за "боязни" использoвать goto.


 smile 
goto здесь не обсуждаем! Это был пример! 
Никто goto не должен боятся - он мирный и не кусается!
 smile 

Обсуждаем опасность конструкции vector<TDateTime>

Почему я должен использовать TList в данном случае. И что будет плохого, если все-таки использую vector. Вопрос не праздный - я действительно использовал vector<TDateTime> и если это опасно - я срочно переделаю код, пока помню где это.

Хочу знать: почему опасно?



PM MAIL ICQ   Вверх
mrbrooks
Дата 23.3.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(Anikmar @  23.3.2009,  16:28 Найти цитируемый пост)
Думаю все дело в конкретных случаях. Ведь молотком надо гвозди забивать, но с дури можно и шурупы. 

Про нечто подобное и писали авторы. 

Цитата(Anikmar @  23.3.2009,  16:28 Найти цитируемый пост)
Достаточно много примеров неумелого использования шаблонов, а потом авторы кричат - полная лажа этот STL. А на самом деле просто неправильно пользуются.

Я честно говоря таких не встречал. Наоборот в STL сила С++ имхо.

Добавлено через 1 минуту и 9 секунд
По памяти вспомнить не могу - давно читал - но помню два слова относительно VCL - осторожно и Дельфи.
PM MAIL   Вверх
mes
Дата 23.3.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Anikmar @  23.3.2009,  15:28 Найти цитируемый пост)

Обсуждаем опасность конструкции vector<TDateTime>

если у TDateTime есть правильно реализованные конструктор по умолчанию и конструктор копий, то, имхо, опасности использования в векторе никакой.
если будете хранить в векторе по указателю, то придется самому следить за удалением.. стандартные средства (стд) такого не поддерживают.


--------------------
PM MAIL WWW   Вверх
Anikmar
Дата 23.3.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата

mrbrooks
По памяти вспомнить не могу - давно читал - но помню два слова относительно VCL - осторожно и Дельфи. 


Если вспомните, скажите пожалуйста. Очень интересно, если честно.

PM MAIL ICQ   Вверх
mes
Дата 23.3.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Anikmar @  23.3.2009,  15:28 Найти цитируемый пост)
Почему я должен использовать TList в данном случае. И что будет плохого, если все-таки использую vector. Вопрос не праздный - я действительно использовал vector<TDateTime> и если это опасно - я срочно переделаю код, пока помню где это.

Хочу знать: почему опасно?

Предполагаю из за бинарной совместимости, std::vector не рекомендуется передавать между приложением и библиотекой. 
насчет VCL не знаю есть ли, но по идеи они должны гарантировать совместимость для "своих" типов. 

Это сообщение отредактировал(а) mes - 23.3.2009, 16:41


--------------------
PM MAIL WWW   Вверх
Anikmar
Дата 23.3.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата

mes
Предполагаю из за бинарной совместимости, std::vector не рекомендуется передавать между приложением и библиотекой. 
насчет VCL не знаю есть ли, но по идеи они должны гарантировать совместимость для "своих" типов. 


Что значит бинарная совместимость? Ведь объект vector создается налету - как же он бинарно может быть не совместим? Копипастим vector и делаем его нешаблонным, что изменится?
PM MAIL ICQ   Вверх
mes
Дата 23.3.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Anikmar @  23.3.2009,  15:47 Найти цитируемый пост)
Что значит бинарная совместимость? Ведь объект vector создается налету - как же он бинарно может быть не совместим? Копипастим vector и делаем его нешаблонным, что изменится? 

отсутствие бинарной совместимости означает что в двух приложениях(откомипилированных разными компиляторами или разными версиями одного) один и тот же объект (vector) , будет иметь разную  бинарную структуру и в таком случае передавать объект одного другому приложению нельзя.

В пределах одного приложения проблем по вышеообозначеному предмету соответсвенно нет.

Это сообщение отредактировал(а) mes - 23.3.2009, 16:55


--------------------
PM MAIL WWW   Вверх
Anikmar
Дата 23.3.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата

mes
отсутствие бинарной совместимости означает что в двух приложениях(откомипилированных разными компиляторами или разными версиями одного) один и тот же объект (vector) , будет иметь разную  бинарную структуру и в таком случае передавать объект одного другому приложению нельзя.


Ну так можно сказать про любой класс. Почему это только на вектор распространяется? Ведь любой класс, откомпилированный разными компиляторами (да даже и одним и тем же с разными настроуками выравнивания) может оказаться бинарно несовместимым.

PM MAIL ICQ   Вверх
mes
Дата 23.3.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Anikmar @  23.3.2009,  15:58 Найти цитируемый пост)
Ну так можно сказать про любой класс. Почему это только на вектор распространяется? Ведь любой класс, откомпилированный разными компиляторами (да даже и одним и тем же с разными настроуками выравнивания) может оказаться бинарно несовместимым.

вектор был для примера, речь идет о библиотеках в целом : std и VCL
первый абзац :
http://qt.osdn.org.ua/binarycompat.html


Это сообщение отредактировал(а) mes - 23.3.2009, 17:10


--------------------
PM MAIL WWW   Вверх
Alca
Дата 23.3.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

Цитата(Alca @  23.3.2009,  14:50 )

Так так можно делать?



Ответь - ЗАЧЕМ?
Где это нужно?
Какой злой гений попросил тебя это вытворять с VCL? 

То что ты делаешь - это масло маслянное. Более того вообще не рекомендуются смешивать VCL и STL. 
Ты спросишь почему - а я тебе отошлю к  Холингверту, Баттерфилду и их пацанам.

Как можно в VCL работать с динамическими массива любого типа?

Это сообщение отредактировал(а) Alca - 23.3.2009, 17:38


--------------------
PM WWW ICQ Skype Jabber   Вверх
Fazil6
Дата 23.3.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(Anikmar @  23.3.2009,  16:28 Найти цитируемый пост)
Почему я должен использовать TList в данном случае. И что будет плохого, если все-таки использую vector. Вопрос не праздный - я действительно использовал vector<TDateTime> и если это опасно - я срочно переделаю код, пока помню где это.

Хочу знать: почему опасно?

успокойся, это НЕОПАСНО. Можно использовать VCL и STL вместе. И с boost можно. Никаких противопоказаний нет. Требования к VCL классам такиеже как и к обычным классам при использовании с STL.
Другое дело, что в лит-ре встречаются рекомендации наподобии:
"если Вы используете какую-то библиотеку, то пользуйтесь ею по-максимуму" 
т.е. если вы пользуетесь VCL, то используйте ее динамический массив (совсем необязательно TList, который нешаблонный и хранит указатели и нужно кастить). В VCL есть вроде как шаблонные классы что-то типа DynamicArray<> и они вполне адекватная альтернатива STL.

Логика тут такая : если можно обойтись одной библиотекой, то зачем использовать две... 

PM MAIL   Вверх
mes
Дата 23.3.2009, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Alca @  23.3.2009,  16:30 Найти цитируемый пост)
Как можно в VCL работать с динамическими массива любого типа?

Имхо, этот в вопрос лучше задать в ветке по борланду. 
интуитивно предполагаю, что это должен быть TArray<>

Это сообщение отредактировал(а) mes - 23.3.2009, 17:54


--------------------
PM MAIL WWW   Вверх
Anikmar
Дата 23.3.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



ИМХО
STL входит в стандарт языка (думаю boost тоже войдет). 
Касаемо других библиотек - согласен. Но STL - это уж вроде как незыблемо.

А вот аналога vector я в VCL не знаю, если честно.

А в MFC (CLR) есть? 

PM MAIL ICQ   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0749 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.