关于函数对象的问题,有两段代码的对比,很费解,请前辈们教教我吧,谢谢了
我编了一个类,作为函数对象,用于统计相同字符的个数。代码如下:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<iterator>
class pa{
public:
std::string name;
int count;
pa(const std::string& d):name(d),count(1){}
};
class value{
public:
std::vector<pa>v;
value(){}
int operator()(const std::string& s){
for(int i=0;i<v.size();i++){
if(s==v[i].name){v[i].count++;return 0;}
}
v.push_back(pa(s));
return 0;
}
};
int main(){
value va;
std::istream_iterator<std::string>ii(std::cin);
std::istream_iterator<std::string>es;
std::vector<std::string>vv(ii,es);
std::for_each(vv.begin(),vv.end(),va);//为什么没有按照我的希望调用呢/???????
//如果换成以下代码,就行,我想知道这两个的区别,,,
/*for(int i=0;i<vv.size();i++){
va(vv[i]);}
*/
for(int i=0;i<va.v.size();i++){
std::cout<<va.v[i].name<<"——"<<va.v[i].count<<std::endl;
}
system("pause");
}
std::for_each(vv.begin(),vv.end(),std::ref(va));