![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
интересует под сколько элементов памяти уже выделено ? capacity вот цитата из приведенной вышее ссылки : (http://www.firststeps.ru/mfc/stl/
Это сообщение отредактировал(а) mes - 29.10.2008, 12:54 |
||||
|
|||||
| RaP1D |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 12.10.2008 Репутация: нет Всего: нет |
Еще вопрос:
Есть вектор, состоящий из 100 объектов. Я добавляю туда еще 500. Затем удаляю 300 элементов. Но память не освобождается. Так и должно быть? А в list тоже также? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
в list освобождается
в vector нет, она будет использована при последующих добавлениях. принудительно освободить память можно при помощи resize() |
|||
|
||||
| RaP1D |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 12.10.2008 Репутация: нет Всего: нет |
Не кидайте в меня тапком, решил создать вручную функцию для увеличения размера массива, так сказать для интереса... И столкнулся с проблемой.
В AddObject передается адрес на объект, затем там с ним шаманят, затем этот объект удаляется (delete [] a;) и должен создаться такой же (a = new Object [num_obj+1];)... Код компилируется, вроде работает, но при завершении программы вылетают ошибки... Я уверен, что ошибка кроется в:
т.к., если писать:
то все ОК... Как исправить функцию, чтобы она корректно работала? |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
|
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
RaP1D, я те ответственно заявляю - быстрее и, что самое главное, прямее STL ты не сделаешь
ты уже понял, как работают динамические массивы переходи на STL - разберись с аллокатором и будет те щасте |
|||
|
||||
| RaP1D |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 12.10.2008 Репутация: нет Всего: нет |
mes, не, не работает
Может я неправильно вызываю функцию? Это сообщение отредактировал(а) RaP1D - 31.10.2008, 09:17 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
нет я написал неверно...sorry ... вот подправил :
Это сообщение отредактировал(а) mes - 31.10.2008, 16:12 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
RaP1D, более полезно и удобно создать класс-контейнер, который будет иметь соотв. операции, типа:
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
осталось дополнить функциональностью и получится стл-контейнер, который в отличие от самописного готов , проверен и имеет вдовавок кучу алгоритмов. ) Это сообщение отредактировал(а) mes - 31.10.2008, 18:07 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
согласен. но человек тренируется и учится, надо помочь ему.
я тут вот еще чуть набросал. идея такая: функций operator [] и Resize() в принципе достаточно для реализации удаления/добавления без доступа к устройству класса ObjectArray. Поэтому на его базе можно создать нечто вроде PowerObjectArray, который реализует требуемый функционал, не обращаясь к структурам ObjectArray напрямую.
Если реализация ObjectArray изменится, например он перестанет вести себя прямолинейно и перераспределять память при каждом чихе, PowerObjectArray менять не придется. RaP1D, посмотри, но имей в виду, что это только для понимания концепций и тренировки. для применения в реальных полезных программах есть стандартные контейнеры vector, list и т.д. |
|||
|
||||
| RaP1D |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 12.10.2008 Репутация: нет Всего: нет |
baldina,
mes, Большущее спасибо!!! О-ба-на... При использовании вектора показывает 200FPS при 3000 объектах, а при использовании самописной функции 604FPS при 3000 объектах!!! Это сообщение отредактировал(а) RaP1D - 31.10.2008, 21:47 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
ага, и скажи заодно какой компилятор и с какими опциями компиляешь.
кстати, заодно, сколько FPS при отсутствии объектов? ;) Добавлено через 4 минуты и 2 секунды RaP1D, разницы не должно быть, если ты прост отображаешь свои 3000. разница во вставке/удалении и, поверь, не в пользу самописных. так что если простой доступ у тебя к vector в 3 раза медленнее, чем к твоему массиву, то либо неправильно используется vector, либо это накладные debug конфигурации. |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |