Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2011, 16:53   #1
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию iterator hot spot

Добрый день. Профилировщик указал на очень горячую точку в программе:
Код:
if ( dist[ (*first)[0] ][ (*second)[0] ] > dist[ (*it1)[0] ][ (*it2)[0] ] )
где first, second, it1 и it2 имеют тип list<deque<size_t>>::iterator (list и deque из STL)
dist - double**

операции вида (*first)[0] - доступ к первому элементу дека, на который указывает итератор

Знаю, что страшно, но это оптимизированный кусок кода глубоко внизу.

Собственно вопрос: реально ли затратны операции вида (*first)[0] или же этот хотспот может появится просто из-за частоты вызова такой строки?

Последний раз редактировалось coinkrsk; 06.04.2011 в 16:56.
coinkrsk вне форума Ответить с цитированием
Старый 06.04.2011, 17:21   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

сама операция (*first)[0] практически не затратна, другое дело, что ты выбрал странный вид хранения данных (деки в списке), + какой то двумерный массив. если и надо оптимизировать, то уровнем выше, при организации структуры хранения данных
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 07.04.2011, 12:55   #3
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Да это то как раз сделано для экономии ресурсов. В этом моменте идет кластеризация данных. Дека хранит номера объектов в классе, лист - набор классов. Дека - для дозаписи в конец ( объединение классов ), лист - для удаления из произвольного места. Двумерный массив хранит расстояния между классами, которые хитро пересчитываются при объединении. Вся эта фигня затеяна чтобы не считать каждый раз расстояния между классами. А вообще да, с утра код уже не кажется таким уж нормальным. Буду думать.
coinkrsk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
vector iterator not dereferencable Tramadolly Общие вопросы C/C++ 7 21.04.2010 08:25
Hot Key в ToolBar Impuls1989 Общие вопросы Delphi 7 13.10.2009 11:05
Hot Key для проги -=<[Evklidd]>=- Общие вопросы Delphi 17 19.04.2009 16:24
vector<T>::iterator begin - почему не компилируется? AndyBr Общие вопросы C/C++ 5 12.03.2009 19:56