Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
ANSI С/С++
(Модератор:
Вад
) > Тема:
реализация контейнера вектор.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: реализация контейнера вектор. (Прочитано 9052 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eugrita
Помогающий
Offline
реализация контейнера вектор.
«
:
20-01-2014 07:20 »
В С нет STL -библиотеки, тем более интересна для практических целей реализация контейнера вектор.
Прочитав дискуссии в инете, понял ,что вектор это логическая структура, определяемая неким интерфейсом т.е. это - получение доступа к ее единицам данных по индексу, операции вставки и удаления, с перевыделением и частичной очисткой памяти, а также полная очистка - метод clear. Программная реализация может быть разной. Как понимаю на основе списков односвязных или двухсвязных или динамических массивов.
Как грамотнее и проще всего в С сделать реализацию контейнера вектор?
т.е мне кажется на основе списка, но доступ по индексу тогда как делать?
Записан
Вад
Модератор
Offline
Пол:
Re: реализация контейнера вектор.
«
Ответ #1 :
20-01-2014 08:20 »
eugrita
, почему на основе списка? В STL в основе вектора всегда непрерывный отрезок памяти (массив), просто содержимое копируется при переаллокации. Собственно, непрерывностью своей он и ценен, для всего остального есть другие контейнеры (дек, лист, сет).
И, кстати, почему списочная или блочная структура (как у list или deque) должна служить непреодолимым препятствием для доступа по индексу?
«
Последнее редактирование: 20-01-2014 08:26 от Вад
»
Записан
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
Re: реализация контейнера вектор.
«
Ответ #2 :
20-01-2014 08:58 »
В добавок, В С++ контейнеры реализованы на шаблонах (template). Насколько я знаю, такого понятия в чистом С не сушествует. Так что, скорее всего, чтобы реализовать типонезависимость, нужно будет очень много применять макросы.
Записан
Не будите спашяго дракона.
Джаффар (Коша)
Вад
Модератор
Offline
Пол:
Re: реализация контейнера вектор.
«
Ответ #3 :
20-01-2014 09:53 »
Finch
, можно просто хранить размер элемента - это, всё-таки, C, за каст к void* и арифметику указателей никто не осудит
Но возврат по значению так не сделать, согласен.
А при желании - да, можно и свой "шаблонный" вектор сделать, конечно. У нас в одной конторе был любитель, о нём легенды ходили - он, не доверяя С++ и STL, пользовался в C++-коде самописным ООП на макросах, с обработкой исключений, контейнерами и всем прочим
«
Последнее редактирование: 20-01-2014 09:57 от Вад
»
Записан
darkelf
Молодой специалист
Offline
Re: реализация контейнера вектор.
«
Ответ #4 :
21-01-2014 06:41 »
eugrita
, для реализации самописного вектора на C, можно воспользоваться обычными malloc() и realloc(), которые можно обернуть в более менее удобный интерфейс. Я реализовывал нечто подобное, если интересно - могу поделиться, но думаю, что в сети такого добра хватает.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
ANSI С/С++
(Модератор:
Вад
) > Тема:
реализация контейнера вектор.
Загружается...