使用引用或新值的C++算法
C++ algorithm using reference or new value
我有一个关于使用函子返回值和参数的问题。让我们有这个代码:
int op_increase (int i) { return ++i; }
int main () {
std::vector<int> foo;
std::vector<int> bar;
// set some values:
for (int i=1; i<6; i++)
foo.push_back (i*10); // foo: 10 20 30 40 50
bar.resize(foo.size()); // allocate space
std::transform (foo.begin(), foo.end(), bar.begin(), op_increase);
现在,函子接受值(caling复制构造函数),当返回值时,它再次调用复制构造函数。我很好奇在使用我认为最快的函子形式时是否出了问题
int& op_increase(int& i) {return ++i;}
或者只是
void op_increase(int& i) {++i;}
谢谢你的回答。
这不是什么对你最好的问题(无论如何,你提出的建议是错误的),而是从std::transform
的角度来看什么是正确的问题
有关文档,请参阅此处。
它指出,当你使用一元运算符时,它的符号必须等价于以下内容:
Ret fun(const Type &a);
此外:
签名不需要具有常量&
类型type必须使得typeInputIt的对象可以被取消引用,然后隐式转换为type
Ret类型必须使得OutputIt类型的对象可以被取消引用并被分配一个Ret类型的值。
也就是说,你似乎误解了transform
的含义,即:
std::transform将给定的函数应用于一个范围,并将结果存储在另一个范围中
根据你的例子,要么你误解了它,要么它不是你想要的,所以也许transform
不是你要的。
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 下面是排序算法O(n)吗
- KMP算法和LPS表构造的运行时间
- 为什么我的排序算法会更改数组值
- 求最大元素位置的分治算法
- 具有非整数边容量的最大流量的Dinic算法
- 到连接组件算法的问题(递归)
- STL算法函数在多个一维容器上的使用
- 读取最后一行代码算法 - c++ 时出现问题
- 括号更改 O(n) 算法
- std::unordered_map 搜索算法是如何实现的?
- 如何实现高效的算法来计算大型数据集的多个不同值?
- 如何在 Mac 上使用 c++17 并行标准库算法?