Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Коллекции.  (Прочитано 7538 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« : 10-03-2010 11:01 » 

У меня так уж получается, что массив указателей (CFeature **pFeature) по индексам обрабатывается быстрее почти на 100%, чем списки типа CList, CTypePtrList по GetNext(), хотя в документации сказано обратное. Или имелось ввиду, что последовательный доступ к элементам в CList быстрее, чем цикличный в CArray?
Страуструп тоже советует использовать CList, а не указатели, но GetTickCount()....
Не понимаю...
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 10-03-2010 11:03 » 

CList очень медленный контейнер для любого вида доступов
у страуструпа могут быть другие аргументы
Записан

Странно всё это....
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #2 : 10-03-2010 11:04 » 

что вы понимаете под "обрабатывается"? Если доступ на чтение, то конечно массив будет быстрее (при любых раскладах), но если вы задумаете вставку, да еще и в середину, то вы поймете прелести списка
Записан

С уважением Lapulya
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #3 : 10-03-2010 11:42 » 

Под "обрабатывается" я имею ввиду следующее:
определяю, какие из элементов другого контейнера мне нужны, считаю их, создаю массив указателей нужного размера, заполняю его указателями на нужные элементы, и считываю. Вставок и удалений нет.
Равно как и не нужен доступ по индексу - по-этому я и решил попробовать CList и щелкать элементы методами AddTail() и GetNext().
Какие контейнеры вы бы посоветовали для данных операций? объектов много поэтому скорость очистки/наполнения/чтения важна.

ЗЫ: возможно, стоит создать свой шаблон однонаправленного списка для такой задачи? Или массив указателей достаточно шустрый?
« Последнее редактирование: 10-03-2010 11:57 от yudjin » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 10-03-2010 11:59 » 

Какие контейнеры вы бы посоветовали для данных операций? объектов много поэтому скорость очистки/наполнения/чтения важна.
std::vector подойдёт )


А простой массив - это всегда самое быстрое (если сортировака не нужна) но там надо понимать и тратить время на работу с памятью
Записан

yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #5 : 10-03-2010 13:04 » new

Угу и его нельзя динамически расширять (простой массив), что есть плохо.
Действительно - перепробовал все коллекции CList, CTypePtrList, std::list, std::vector. Что хочу сказать - std::list самый медленный по вставке оказался (почти в 4-7 раз), std::vector чуть быстрее CList и CTypePtrList; быстрее всего работает массив указателей. Единственный для меня минус массива указателей - размер заранее знать нужно.
« Последнее редактирование: 10-03-2010 13:45 от yudjin » Записан
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #6 : 10-03-2010 13:26 » 

Как уже несколько раз сказали:
1. ничто не сравнится (не превзойдет) по скорости доступа к данным с массивом (кроме std::vector, по скорости он аналогичен). При этом данные можно читать и перезаписывать, но не вставлять/вырезать
2. если будут манипуляции со вставкой, то тут все упирается в доп требования (частота вставок, место вставок и т.д.) надо смотреть в сторону std::list или std::vector (если вставка в середину часты, это скорее всего не лучший вариант), std::deque

если надо динамически расширять, то опять таки или vector/deque или list (есть еще и map, но это если нужен доступ по ключу)
Записан

С уважением Lapulya
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #7 : 10-03-2010 13:45 » 

Спасибо. остановился на std::vector
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines