Russian Qt Forum
Ноябрь 23, 2024, 10:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Эффективность QListIterator?  (Прочитано 6739 раз)
tguglanaklona
Гость
« : Июль 31, 2012, 12:34 »

Насколько QListIterator при переборе списка работает быстрее оператора QList::at ? Скажем, у меня есть перебор списков из всего 6-8 элементов, выполняющийся много раз в цикле. Каждый раз в цикле нужно создавать отдельный QListIterator (списки разные). Либо ничего не создавать и использовать QList::at. Интересует скорость работы.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Июль 31, 2012, 12:41 »

Насколько QListIterator при переборе списка работает быстрее оператора QList::at ? Скажем, у меня есть перебор списков из всего 6-8 элементов, выполняющийся много раз в цикле. Каждый раз в цикле нужно создавать отдельный QListIterator (списки разные). Либо ничего не создавать и использовать QList::at. Интересует скорость работы.
Ничего существенного не выжать, в данном случае лучше пожертвовать "кошкиными слезами" зато писать как удобнее, хоть бы оператором [].  Но если человек вообще о производительности думает - это радует, сейчас таких мало.
Записан
tguglanaklona
Гость
« Ответ #2 : Июль 31, 2012, 15:55 »

Так вот а будут ли слёзы  Плачущий  ? Сколько скажем нужно элементов чтобы стало заметно - никто не проверял это? И не уходит ли лишнего на создание самого объекта QListIterator?
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #3 : Июль 31, 2012, 15:57 »

Так вот а будут ли слёзы  Плачущий  ? Сколько скажем нужно элементов чтобы стало заметно - никто не проверял это?
Потрать 5 минут, проверь и отпишись )
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #4 : Июль 31, 2012, 16:03 »

Из справки:
Цитировать
QList is implemented in such a way that direct index-based access is just as fast as using iterators.

Edit: Если вы создаёте итераторы каждый раз из-за того, что список изменяется, то посмотрите в сторону QMutableListIterator
« Последнее редактирование: Июль 31, 2012, 16:06 от Swa » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Июль 31, 2012, 16:23 »

Так вот а будут ли слёзы  Плачущий  ? Сколько скажем нужно элементов чтобы стало заметно - никто не проверял это?
Потрать 5 минут, проверь и отпишись )
Я тоже с нетерпением жду результатов тестирования  Улыбающийся
Записан
tguglanaklona
Гость
« Ответ #6 : Июль 31, 2012, 17:47 »

Из справки:
Цитировать
QList is implemented in such a way that direct index-based access is just as fast as using iterators.

Edit: Если вы создаёте итераторы каждый раз из-за того, что список изменяется, то посмотрите в сторону QMutableListIterator

Спасибо, погляжу)
Записан
tguglanaklona
Гость
« Ответ #7 : Июль 31, 2012, 17:49 »

Так вот а будут ли слёзы  Плачущий  ? Сколько скажем нужно элементов чтобы стало заметно - никто не проверял это?
Потрать 5 минут, проверь и отпишись )

Нееее...  пока 5 минут мои заняты  Смеющийся, это вопрос к теории по проблеме
Записан
DmitryM
Гость
« Ответ #8 : Июль 31, 2012, 22:12 »

В описание они используют стандартный O(f(n)), так что теоретически одинаково.
Но вся соль в том, что внутри O скрывается константа, которая везде своя.
Поэтому надо делать тесты и замерять какой метод быстрее.
Записан
tguglanaklona
Гость
« Ответ #9 : Август 02, 2012, 09:58 »

В описание они используют стандартный O(f(n)), так что теоретически одинаково.

Спасибо.
Цитировать
Но вся соль в том, что внутри O скрывается константа, которая везде своя.
Поэтому надо делать тесты и замерять какой метод быстрее.

Ну это скорее от данных зависит, хотя фактически, конечно, при _одинаковом_ наборе данных для тестирования скорость алгоритмов есс-но отлична.
Записан
DmitryM
Гость
« Ответ #10 : Август 03, 2012, 10:28 »

Ну это скорее от данных зависит, хотя фактически, конечно, при _одинаковом_ наборе данных для тестирования скорость алгоритмов есс-но отлична.
Константы зависят напрямую от реализации.
Записан
tguglanaklona
Гость
« Ответ #11 : Август 09, 2012, 17:08 »

Ну это скорее от данных зависит, хотя фактически, конечно, при _одинаковом_ наборе данных для тестирования скорость алгоритмов есс-но отлична.
Константы зависят напрямую от реализации.

Ну да, произвольные константы и от реализации зависят, но ей не определяются Смеющийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Август 09, 2012, 17:34 »

Все эти рассуждения об O(n) "вообще говоря" правильны, но в данном случае неуместны. Основное правило :

- оптимизировать надо место которое является узким (на данный момент), а не то что хочется.

Ну например. Подробностей проекта я конечно не знаю,  но рискну предположить что напр QString в нем интенсивно используется. А если так то просто вызов одного конструктора QString обойдется дороже чем удастся сэкономить на 1000 "оптимальных" вызовов итератора. Кому же нужна такая экономия?

Ну и вообще, если хочется пользоваться удобными классами, то о производительности лучше помалкивать. А если кто-то начнет возникать - так приведите ему аргумент типа "скорость разработки" и.т.п.  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.093 секунд. Запросов: 22.