我有这个功能,而且他们的工作速度不够快。你知道如何以更有效的方式写它吗?
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());
}
答案 0 :(得分:0)
push_back()可能很重,具体取决于容器。如果您在向量中使用它,可以尝试预先保留大小,如果您知道它,或者保留更大的块以减轻分配开销。
更新:
说实话,问题太模糊了。整洁()& isConsistent()是黑盒子,它不知道它们是做什么的,它们是如何做的,以及它们是否可以做得更好。因此,评论函数中代码的效率可能是一个红色的鲱鱼。
除非需要在容器中途快速插入和移除,否则将列表用作容器可能不是最佳选择。 Vector可能是一个更好的选择,应该以一种方式将分配减少到最小(重新分配需要容器的整个内容的副本,因此它越大,它对push_back()越慢,更喜欢保留(如果可能的话)。
此外,没有提供有关此功能使用情况的信息。即它可能不是函数中的低效率,而是它的调用方式以及它被调用的频率可能是瓶颈。