【问题标题】:Do STL algorithms functions, like accumulate, avoid copy if the function passed to them accepts a reference?如果传递给它们的函数接受引用,STL 算法函数(如累积)是否避免复制?
【发布时间】:2017-05-15 21:32:29
【问题描述】:

例如,假设我想对一个范围(由开始和结束迭代器标识)进行排序。如果我将一个参数为两个 A& (A 是一个类) 的 lambda 函数传递给 std::sort ,那么 STL 算法是否会避免复制两个对象而直接调用我的排序函数?

【问题讨论】:

  • 一个代码示例可能会更好地传达您的问题...
  • 由于不允许更改谓词中的任何一个参数,将参数指定为const A& 将是理想的。在这种情况下,不,不会有复制。

标签: c++ algorithm stl


【解决方案1】:

查看std::sort 参考,我们看到了

解引用的RandomIt的类型必须满足 MoveAssignableMoveConstructible

因此,可复制(CopyConstructibleCopyAssignable)不在此算法的要求中。这保证了它永远不会尝试复制您的对象。

【讨论】:

  • cppreference.org 是一个很棒的网站,但它不是“规范”。
  • @NicolBolas 它通常非常符合标准。无论如何,修正措辞,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2022-01-24
  • 2011-01-29
  • 2012-07-18
相关资源
最近更新 更多