Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
WinAPI & Visual C++
(Модератор:
Вад
) > Тема:
Коллекции.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Коллекции. (Прочитано 7535 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
yudjin
Помогающий
Offline
Пол:
Коллекции.
«
:
10-03-2010 11:01 »
У меня так уж получается, что массив указателей (CFeature **pFeature) по индексам обрабатывается быстрее почти на 100%, чем списки типа CList, CTypePtrList по GetNext(), хотя в документации сказано обратное. Или имелось ввиду, что последовательный доступ к элементам в CList быстрее, чем цикличный в CArray?
Страуструп тоже советует использовать CList, а не указатели, но GetTickCount()....
Не понимаю...
Записан
Антон (LogRus)
Глобальный модератор
Offline
Пол:
Внимание! Люблю сахар в кубиках!
Re: Коллекции.
«
Ответ #1 :
10-03-2010 11:03 »
CList очень медленный контейнер для любого вида доступов
у страуструпа могут быть другие аргументы
Записан
Странно всё это....
lapulya
Молодой специалист
Offline
Re: Коллекции.
«
Ответ #2 :
10-03-2010 11:04 »
что вы понимаете под "обрабатывается"? Если доступ на чтение, то конечно массив будет быстрее (при любых раскладах), но если вы задумаете вставку, да еще и в середину, то вы поймете прелести списка
Записан
С уважением Lapulya
yudjin
Помогающий
Offline
Пол:
Re: Коллекции.
«
Ответ #3 :
10-03-2010 11:42 »
Под "обрабатывается" я имею ввиду следующее:
определяю, какие из элементов другого контейнера мне нужны, считаю их, создаю массив указателей нужного размера, заполняю его указателями на нужные элементы, и считываю. Вставок и удалений нет.
Равно как и не нужен доступ по индексу - по-этому я и решил попробовать CList и щелкать элементы методами AddTail() и GetNext().
Какие контейнеры вы бы посоветовали для данных операций? объектов много поэтому скорость очистки/наполнения/чтения важна.
ЗЫ: возможно, стоит создать свой шаблон однонаправленного списка для такой задачи? Или массив указателей достаточно шустрый?
«
Последнее редактирование: 10-03-2010 11:57 от yudjin
»
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Коллекции.
«
Ответ #4 :
10-03-2010 11:59 »
Цитата: yudjin от 10-03-2010 11:42
Какие контейнеры вы бы посоветовали для данных операций? объектов много поэтому скорость очистки/наполнения/чтения важна.
std::vector подойдёт )
А простой массив - это всегда самое быстрое (если сортировака не нужна) но там надо понимать и тратить время на работу с памятью
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
yudjin
Помогающий
Offline
Пол:
Re: Коллекции.
«
Ответ #5 :
10-03-2010 13:04 »
Угу и его нельзя динамически расширять (простой массив), что есть плохо.
Действительно - перепробовал все коллекции CList, CTypePtrList, std::list, std::vector. Что хочу сказать - std::list самый медленный по вставке оказался (почти в 4-7 раз), std::vector чуть быстрее CList и CTypePtrList; быстрее всего работает массив указателей. Единственный для меня минус массива указателей - размер заранее знать нужно.
«
Последнее редактирование: 10-03-2010 13:45 от yudjin
»
Записан
lapulya
Молодой специалист
Offline
Re: Коллекции.
«
Ответ #6 :
10-03-2010 13:26 »
Как уже несколько раз сказали:
1. ничто не сравнится (не превзойдет) по скорости доступа к данным с массивом (кроме std::vector, по скорости он аналогичен). При этом данные можно читать и перезаписывать, но не вставлять/вырезать
2. если будут манипуляции со вставкой, то тут все упирается в доп требования (частота вставок, место вставок и т.д.) надо смотреть в сторону std::list или std::vector (если вставка в середину часты, это скорее всего не лучший вариант), std::deque
если надо динамически расширять, то опять таки или vector/deque или list (есть еще и map, но это если нужен доступ по ключу)
Записан
С уважением Lapulya
yudjin
Помогающий
Offline
Пол:
Re: Коллекции.
«
Ответ #7 :
10-03-2010 13:45 »
Спасибо. остановился на std::vector
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
WinAPI & Visual C++
(Модератор:
Вад
) > Тема:
Коллекции.
Загружается...