C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Расширение динамического массива, как оптимальнее и безопаснее реализовать
Emerald
Отправлено: 09.01.2005, 18:47


Ученик-кочегар

Группа: Участник
Сообщений: 7



Собственно сабж. Видимо С++Builder 5 как особенно работает с памятью. Куча ограничений, которые мешают сделать то, что надо.
Как бы вы это реализовали?
Георгий
Отправлено: 09.01.2005, 22:52


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



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

Отредактировано Георгий — 09/01/2005, 23:55
Emerald
Отправлено: 10.01.2005, 13:07


Ученик-кочегар

Группа: Участник
Сообщений: 7



Можно ткнуть в ссылку? А то я что то не найду... Vector позволяет менять размеры массива с сохранением существующей информации?
Георгий
Отправлено: 10.01.2005, 14:25


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



stl::vector- объект из стандартной c++ библиотеки шаблонов (STL).
его описание есть везде где описывается STL в том числе стандартной помощи BCB — пишем слово vector жмём на нём F1 и показывается его описание.
по поводу resize:
"alters the size of self. of the new size (sz) is greater that the current size, then sz-size() instances of the default value of type T are inserted at the end of the vector. if the new size is smallerthar current capacity, then vector is truncated by erasing size()-sz elements of the end. if sz is equal to capacity then no action is taken."
Emerald
Отправлено: 12.01.2005, 11:59


Ученик-кочегар

Группа: Участник
Сообщений: 7



Мда, хелп я посмотрел. С одной стороны вроде вещь хорошая, но уж как то совсем специфично все. Как то поиск странно проводится, и вставка в середину тоже.
А русская дока по vector есть?
Gedeon
Отправлено: 12.01.2005, 12:24


Ветеран

Группа: Модератор
Сообщений: 1742



Поищите на форуме я приводил ссылку на книгу стл там найдете все что нужно и не только про вектор.
vvoid
Отправлено: 12.01.2005, 16:12


Машинист паровоза

Группа: Участник
Сообщений: 171



С векторами конечно удобней, но если вам они непривычны — используйте схему динамического выделения памяти:
malloc --> realloc --> free
Все проблемы с безопасностью берёт на себя компиллер — вам остаётся только пользоваться и наслаждаться жизнью. smile.gif
Удачи!
Emerald
Отправлено: 13.01.2005, 12:35


Ученик-кочегар

Группа: Участник
Сообщений: 7



Уж больно много неудобств с realloc'ом
Gedeon
Отправлено: 13.01.2005, 12:52


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (vvoid @ 12/01/2005, 17:14)
Все проблемы с безопасностью берёт на себя компиллер

О как а я и не знал smile.gif
vvoid
Отправлено: 13.01.2005, 17:11


Машинист паровоза

Группа: Участник
Сообщений: 171



QUOTE (Gedeon @ 13/01/2005, 13:54)
QUOTE (vvoid @ 12/01/2005, 17:14)
Все проблемы с безопасностью берёт на себя компиллер

О как а я и не знал smile.gif

Не, может я и погарячился, но если не сложно, объясните, что к чему? Интересно, всё таки!
Gedeon
Отправлено: 13.01.2005, 17:37


Ветеран

Группа: Модератор
Сообщений: 1742



ну как тут обьяснить, по сути те же new, delete и все остальные приколы работающие с памятью и используют эти malloc, realloc, free но с ними как бы проще, а если вы маллоком память выделите, и не освободите компилер то этого не заметит, плюс с ними запариться намного проще, делал я когда-то прогу с ними, так стабильный виолэйшн был, еле нашел где запара была и то из принципа искал, т.к. по срокам пока нашел уже все прошло. Так что в любом случае все зависит от программиста, компилятор лишь помогает кое в чем, но с разными инструментами и разные шансы нагородить чего-то ненужного и трудно потом отлавливаемого.
vvoid
Отправлено: 13.01.2005, 17:52


Машинист паровоза

Группа: Участник
Сообщений: 171



Я поначалу пренебрежительно отнёсся к использованию malloc-семейства. Потом акуратно разобрался и всё вроде пошло путём. Ещё всегда при разработке держу включенным CodeGuard Validation. Главное при сборке релиза не забыть его вырубить! )) а то везде рядом с екзешником будет валятся его файло — Глаза мылить! smile.gif
Вообщем, я считаю, realloc при необходимости можно юзать!
Shura
Отправлено: 14.01.2005, 16:08


Дежурный стрелочник

Группа: Участник
Сообщений: 45



по-любому лучше использовать std:vector. А если будет много вставок в центр, и не надо обращаться по индексу, а только считывать по очереди от начала и до конца, то лучше пользовать std:list. — это связный список.

Вернуться в Вопросы программирования в C++Builder