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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: алгоритмы для вектора с указателями на объекты  (Прочитано 10620 раз)
Karl-Philipp
Гость
« Ответ #15 : Октябрь 31, 2008, 12:02 »

нет, не перепутал. Чуть подправил алгоритм:
1. partition для сортировки по статусу false для того, чтобы в цикле уже перебирать только эти объекты и после сравнивать их с другими (п2.).

(partition на данном шаге делается из-за сравнительно небольшого количества объектов (по сравнению с размером вектора) со статусом false. Именно по этому хочу их отсеять, а потом уже сравнивать с другими объектами в п2)

2. Пробежаться по вектору до указателя, который возвратит partition - присвоить false нужным членам.
3. Еще раз partition (для отсеивания всех объектов со статусом равным false)
4. erase

В пункте 2 пробежаться по вектору можно с помощью цикла или как-то можно быстрее? Можно ли, например, алгоритмом for_each? (количество объектов в векторе может быть до одного миллиона)
« Последнее редактирование: Октябрь 31, 2008, 17:00 от terlan » Записан
Tonal
Гость
« Ответ #16 : Ноябрь 01, 2008, 00:41 »

По пункту 1: Если бы объектов с false было относительно много, то это бы имело смысл, а так на шаге 2 тебе опять практически весь вектор пробегать...
И потом опять partition по практически тому же вектору.
Т.е. в результате некоторые элементы возможно переместятся 2 раза.

Ну и бежать как бы всё равно чем но for_each предпологает неизменность вектора при пробеге. Так что лучше или явным циклом, или transform-ом.

С другой стороны - ты уверен что тормозит именно в этом месте?
Если элементы массива не очень велики, и их количество меньше десятков тысяч, то на всё это можно забить - никакой разницы не почувствуешь. Улыбающийся
Профилятор пускал?
Записан
Karl-Philipp
Гость
« Ответ #17 : Ноябрь 01, 2008, 11:43 »

- замечания по пункту 1 принимаются Улыбающийся

С другой стороны - ты уверен что тормозит именно в этом месте?
- нет, не уверен, так как еще не пробывал Улыбающийся
Если элементы массива не очень велики, и их количество меньше десятков тысяч, то на всё это можно забить - никакой разницы не почувствуешь. Улыбающийся
Профилятор пускал?
- Объектов может быть от нескольких тысяч до 1 миллиона в очень крайнем случае Улыбающийся

- Профилятором не пользовался - не знал, что это такое. Почитал - сказано, что это инструмент, позволяющий отслеживать выполнение другой компьютерной программы. Использую MSVS2002 поискал там - не нашёл Грустный видать нет такого. Нашёл, что можно использовать сторонние профайлеры. Обязательно попробую.
Спасибо за ответы Улыбающийся
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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