【问题标题】:STL iterators: Prefix increment faster? [duplicate]STL 迭代器:前缀增量更快? [复制]
【发布时间】:2011-07-10 14:02:33
【问题描述】:

可能的重复:
Preincrement faster than postincrement in C++ - true? If yes, why is it?
Is there a performance difference between i++ and ++i in C++?

有人告诉我,在使用 STL 及其迭代器时,我应该始终使用 ++iter 而不是 iter++

我引用:

因为它只能更快,永远不会慢

这是真的吗?

【问题讨论】:

标签: c++ stl


【解决方案1】:

是的。一般情况下确实如此。后缀增量的任务是保存和返回迭代器的 old 值。这需要时间和精力,这通常会使它变慢。

对于所有实现传统前置/后置语义的重载递增/递减运算符通常都是如此。

这个话题被打死了。在这里搜索“前缀后缀”以获得大量更详细的解释。

【讨论】:

  • 一个好的优化器通常可以删除旧值的复制,尤其是在不使用的情况下。所以“慢”应该是“不快”。
  • @Bo Persson:这就是我说“一般”的原因。
  • 不,你说“一般较慢”,我说“一般不快”。 :-)。问题是:如果不是更快,为什么要使用后增量?没有理由!
  • “不快”不需要“一般”。后增量并不快。后增量通常较慢。
【解决方案2】:

您可以在此示例中看到在后缀中创建了一个临时...这比前缀慢,其中没有创建高级对象

// Define prefix increment operator.
Point& Point::operator++()
{
   _x++;
   _y++;
   return *this;
}

// Define postfix increment operator.
Point Point::operator++(int)
{
   Point temp = *this;
   ++*this;
   return temp;
}

++iter 比 iter++ 更快,因为不创建对象的副本

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 2017-06-05
    • 2021-09-03
    • 1970-01-01
    • 2012-10-03
    • 2011-05-01
    • 2012-08-24
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多