#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class add{
public:
add():value(0){}
void operator()(int i){value += i;}
void print(){cout << "the value is "<< value << endl;}
private:
int value;
};
int main(){
vector<int> v1;
for(int i = 1;i < 100;i ++){
v1.push_back(i);
}
add add1;
for_each(v1.begin(),v1.end(),add1);
add1.print();
}
最后结果应该为4950,可是最后输出的是0,为什么呢??
看看for_each()函数的定义
template<class InputIterator, class Function> Function for_each(InputIterator first, InputIterator last, Function fn) { while (first!=last) { fn (*first); ++first; } return fn; // or, since C++11: return move(fn); }
传进去的Function是按值传递,改变不会带出来,要变的话只有把value改为static,或者用int * value;
这就说得过去了,谢谢
@demps_c: 最好的是
add add1;
add1 = for_each(v1.begin(),v1.end(),add1);
add1.print();
这个标准做法
1、按照你的思路也应该是5050,怎么变成4950了?
2、对C好久木有弄了,所以有点看不懂,不过,你的foreach有执行(add1(xx))吗?貌似没有吧?
1 加到99 是4950
这个是函数对象,执行了的。
要不把void operator()(int i){value += i;}改为
void operator()(int i){value += i;cout<< value << endl;}就会出现最后的值是4950
可是最终的结果不知道怎么回事
@demps_c: 应该是operator调用的value与print调用的value不是属于一个对象的。
1、你尝试对foreach调用两次,看最后的结果是否9900?
2、你尝试对add初始化value为非0,看下结果是否又是4950?
对C真心的忘记了,按照我上面的思路,你分析下代码看。
@519740105: 尝试 ???先出结果然后对应结果找原因??不好吧
@demps_c: 明显你的operator的value跟print的value不是同一个,又或者value没有真正的存储起来,所以才会有这样的问题。
我对C的操作符没研究过,所以没办法给你具体的帮助,只能这样提示你而已。
@519740105: 谢谢了。我好好看看