如果传递给它们的函数接受引用,STL 算法函数(如累积)是不是避免复制?
Posted
技术标签:
【中文标题】如果传递给它们的函数接受引用,STL 算法函数(如累积)是不是避免复制?【英文标题】: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&
将是理想的。在这种情况下,不,不会有复制。
【参考方案1】:
查看std::sort
参考,我们看到了
解引用的RandomIt的类型必须满足 MoveAssignable 和 MoveConstructible。
因此,可复制(CopyConstructible 或 CopyAssignable)不在此算法的要求中。这保证了它永远不会尝试复制您的对象。
【讨论】:
cppreference.org 是一个很棒的网站,但它不是“规范”。 @NicolBolas 它通常非常符合标准。无论如何,修正措辞,谢谢。以上是关于如果传递给它们的函数接受引用,STL 算法函数(如累积)是不是避免复制?的主要内容,如果未能解决你的问题,请参考以下文章