关于函数对象的有关问题,有两段代码的对比,很费解,请前辈们教教小弟我吧,多谢了

关于函数对象的问题,有两段代码的对比,很费解,请前辈们教教我吧,谢谢了
我编了一个类,作为函数对象,用于统计相同字符的个数。代码如下:
#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的理解错了,那for_each到底该怎么用??呢??大家教教我吧。。讨论讨论

------解决方案--------------------
改成这样试试.

std::for_each(vv.begin(),vv.end(),std::ref(va));


------解决方案--------------------
引用:
Quote: 引用:

改成这样试试.

std::for_each(vv.begin(),vv.end(),std::ref(va));
这样做的区别是什么??谢谢

区别就是,va在每一次循环时都被复制了一份,所以最初那个va根本就没变过,你看一下std::for_each的源码就知道了,那就是个循环。