http://www.cplusplus.com/reference/algorithm/for_each/
一元函数取一个元素
范围作为参数。这可以
是一个指向函数或
其类重载的对象
操作员()。它的返回值,如果有的话,
被忽略。
根据这篇文章,我预计 for_each 实际上会修改作为其第三个参数给出的对象,但似乎 for_each 对临时对象进行操作,甚至不修改给出的对象。
那么,为什么要这样实施呢?看起来用处要小得多。或者我是否误解了某些内容并且下面的代码包含错误?
#include <iostream>
#include <vector>
#include <algorithm>
template <class T> struct Multiplicator{
T mresult;
public:
const T& result() const{return mresult;}
Multiplicator(T init_result = 1){
mresult = init_result;
}
void operator()(T element){
mresult *= element;
std::cout << element << " "; // debug print
}
};
int main()
{
std::vector<double> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
Multiplicator<double> multiply;
std::for_each(vec.begin(),vec.end(),multiply);
std::cout << "\nResult: " << multiply.result() << std::endl;
return 0;
}
预期输出:
1 2 3 Result: 6
但得到以下输出:
1 2 3 Result: 1
函数对象按值获取。for_each
返回函数对象,因此如果将其更改为:
multiply = std::for_each(vec.begin(),vec.end(),multiply);
你得到了预期的输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)