оптимизировать для цикла, используя стандартный for_each или инструменты повышения

0

Я пытаюсь оптимизировать цикл ниже. Он выполняет цикл for std :: vector типа struct. то он проверяет, имеет ли какой-либо член с типом, равным "INSIDE_WITH_MORE_ONE_INTER". если он найдет такого члена, он применит к нему функцию и, наконец, на основе результата он может сохранить тип изменения в "NOT_DEFINED".

for(pnt_vec_iter pnt_iter = newpnTs.begin(); pnt_iter != newpnTs.end(); pnt_iter++)
  {
    if(pnt_iter->_type == INSIDE_WITH_MORE_ONE_INTER)
    {
      if(!DoublePointsOnEdgeCheck(*this, pnt_iter->_face, pnt_iter))
      {
        pnt_iter->_type == NOT_DEFINED;
      }
    }
  }

Мне интересно, можно ли оптимизировать код выше, исключая определение функции для этого.

  • 1
    Что заставляет вас думать, что вам нужно оптимизировать метод в первую очередь?
  • 1
    Первое правило оптимизации: ИЗМЕРЕНИЕ . Что сказали твои измерения? Как это соотносится с вашим критерием приемлемости / нет?
Показать ещё 3 комментария
Теги:
boost

1 ответ

1
Лучший ответ

Это слишком сильно зависит от контекста, например

  • какова местность ссылок на данные зависимостей от DoublePointsOnEdgeCheck?
  • какая относительная частота точек с _type==ISIDE_WITH_MORE_ONE_INTER? Как упорядочиваются точки?
  • Какова структура памяти точки? и т.п.

Просто просмотрите его и/представьте/, что бы ускорить алгоритм zip через набор.

Например

  • "Что, если мне не нужно было перебирать все точки?"
  • "Что, если точки уже были проиндексированы/отсортированы по _type?" (вы должны использовать простой equal_range(INSIDE_WITH_MORE_ONE_INTER) чтобы уменьшить работу)

  • Что делать, если я вообще не выполняю эту работу, но вместо этого лениво переоцениваю значение для типа _type в type() accessor type()? "(Или это слишком сильно нарушает константу? Threading?)

И т.п.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню