2016-06-04 2 views
-5

У меня есть эта функция, и они не работают достаточно быстро. У вас есть идея, как написать его более эффективным способом?C++ Как сделать функцию более быстрой?

void IntervalSet::add(const SimpleInterval & interval) 
{ 
    if (interval.isEmpty()) 
     return; 

    m_intervals.push_back(interval); 
    tidy(); 

    assert(isConsistent()); 
} 

void IntervalSet::add(const IntervalSet & intervalSet) 
{ 
    for(auto &interval : intervalSet.m_intervals) 
     add(interval); 
    assert(isConsistent()); 
} 
+3

Что такое 'm_intervals'? – arrowd

+0

Что делает 'tidy()' и 'isConsistent()' do? –

+0

Когда вы говорите, что не работает достаточно быстро, по отношению к чему? Скорее вы ожидаете? Другая реализация, которая делает то же самое быстрее? Нужна точка отсчета. – lfgtm

ответ

0

push_back() может быть тяжелым в зависимости от контейнера. Если вы используете его в векторе, попробуйте зарезервировать заранее размер, если вы его знаете, или вместо этого зарезервируйте большие блоки для уменьшения расходов на распределение.

UPDATE:

Честно говоря, его слишком расплывчатым вопрос. tidy() & isConsistent() - это черные ящики и неизвестное, что они делают, как они это делают, и если они могут сделать это лучше. Таким образом, комментирование эффективности кода в функции может быть красной селедкой.

Использование списка в качестве контейнера может быть не лучшим, если не требуется быстрый ввод и удаление в середине пути через контейнер. Вектор может быть лучшим вариантом и должен использоваться таким образом, чтобы уменьшить выделение до минимума (для перераспределения потребуется копия всего содержимого контейнера, поэтому чем больше она будет медленнее, чем push_back(), предпочитайте резерв() если возможно).

Также не сообщается информация о контексте использования этой функции. то есть это может быть неэффективность функции, скорее, как она называется и как часто она называется, может быть узким местом.

Смежные вопросы