【问题标题】:C++ How to make function perform faster?C ++如何使函数执行得更快?
【发布时间】:2016-06-04 15:47:34
【问题描述】:

我有这个功能,但它们的工作速度不够快。您知道如何以更有效的方式编写它吗?

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());
}

【问题讨论】:

  • 什么是m_intervals
  • tidy()isConsistent() 是做什么的?
  • 当你说工作不够快时,与什么有关?你期望的速度?另一个更快地做同样事情的实现?需要一个参考点。
  • m_intervals 是 SimpleIntervals 的链表
  • 是的,另一个实现同样的事情更快。

标签: c++ function


【解决方案1】:

push_back() 可能很重,具体取决于容器。如果你在向量中使用它,如果你知道它,可以尝试提前保留大小,或者保留更大的块以减少分配开销。

更新:

说实话,这个问题太模糊了。 tidy() 和 isConsistent() 是黑匣子,不知道它们做什么,如何做,以及是否可以做得更好。所以在函数中评论代码的效率可能是一个红鲱鱼。

除非需要在容器中途快速插入和移除,否则将列表用作容器可能不是最好的。 Vector 可能是一个更好的选择,并且应该以将分配减少到最低限度的方式使用(重新分配将需要容器的全部内容的副本,因此它越大越慢,push_back(),更喜欢保留() 如果可能的话)。

此外,没有提供有关使用此功能的上下文的信息。也就是说,它可能不是函数效率低下,而是它的调用方式和调用频率可能是瓶颈。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2016-09-09
    • 2012-01-17
    • 2014-03-20
    • 1970-01-01
    相关资源
    最近更新 更多