c++ - 为什么'for_each'不读取函数对象
问题描述
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template <class T>
class Sum {
public:
Sum(T i = 0) : res(i) {}
void operator()(T x) { res =res + x; }
T result() const { return res; }
private:
T res;
};
int main() {
Sum<int> s;
vector<int> vec;
vec.insert(vec.begin(), 10);
vec.insert(vec.begin()+1, 10);
vec.insert(vec.begin()+2, 10);
vector<int>::iterator itr = vec.begin();
cout << *itr << endl;
for_each(vec.begin(), vec.end(), s);
cout << "sum is" << s.result() << endl;
return 0;
}
这是我的代码。我想vec
在 Sum 类中添加值res
。for_each
应该是调用s
's operator()
,所以结果应该是 30,但它显示 0。
我认为在向量中添加值没有问题。为什么s.operator()
不工作?
解决方案
for_each
它的第三个参数按值获取,这意味着每次调用都会operator()
影响s
. 有一种算法可以准确地用于您正在做的事情std::accumulate
,但是如果您希望它与它一起工作,for_each
您需要使用from传递s
“通过引用” 。std::ref
<functional>
for_each(vec.begin(), vec.end(), ref(s));
推荐阅读
- ios - 将数据解析为 Array 计数为 0
- node.js - Swagger JSDoc 不从子文件夹加载 API 文件
- typescript - Typescript - 从生产中删除一些代码行
- arrays - Julia:在 for 循环中累积数组(循环局部范围的问题)
- sql - Oracle 顶点 ORA-00905 和 ORA-06512
- php - Laravel:@section 内不可点击的链接
- powershell - Count lines in zipped files using Windows PowerShell
- qt - 如何让这个 QML ScrollView 显示垂直滚动条
- sql-server - 可以将来自 Amazon S3 的 SQL Server BAK 文件直接还原到 Snowflake Dataware 房屋吗?
- javascript - JavaScript 限制添加到 DOM 的表单输入数量