统计出现至多次数的程序

统计出现最多次数的程序C/C++ codetemplatetypename Ttypename T::value_type mostFre(T first,T last){

统计出现最多次数的程序

C/C++ code
template<typename T>typename T::value_type mostFre(T first,T last){    //计算分配内存的大小    std::size_t amount=0;    T start=first;    while(start!=last)    {        amount++;        start++;    }    //定义类型别名    typedef std::vector<typename T::value_type> VecType;    //创建vector对象,用于保存输入序列的副本    VecType vec(amount);    VecType::itertor newFirst=vec.begin();    VecType::itertor nweLast=vec.end();    //将输入序列复制到vector对象    std:uninitialized_copy(first,last,newFirst);    std::sort(newFirst,newLast);        //对副本进行排序,使得相同值出现在相邻的位置    std::size_t maxOccu=0,occu=0;        //出现最频繁的次数,当前值的次数    VecType::iterator preIter=newFirst;    //指向当前值的前一个值    VecType::iterator maxOccuElemIt=newFirst;//指向当前出现最频繁的值    while(newFirst!=newLast)    {        if(*newFirst!=*preIter)            //当前值与前一个不同        {            if(occu>maxOccu)            //当前值的出现次数为目前最大次数            {                maxOccu=occu;                maxOccuElemIt=preIter;            }            occu=0;        }        ++occu;        preIter=newFirst;        ++newFirst;    }    //最后一个值的出现次数与当前的最大次数进行比较                           就这个地方不怎么清楚啊,为什么还要进行最后一个值的比较???    if(occu>maxOccu)    //最后一个值的出现次数为目前最大次数    {        maxOccu=occu;        maxOccuElemIt=preIter;    }    return *maxOccuElemIt;}


[解决办法]
C/C++ code
 VecType::itertor nweLast=vec.end();//写错了把     //将输入序列复制到vector对象    std:uninitialized_copy(first,last,newFirst);    std::sort(newFirst,newLast);        //对副本进行排序,使得相同值出现在相邻的位置    std::size_t maxOccu=0,occu=0;        //出现最频繁的次数,当前值的次数    VecType::iterator preIter=newFirst;    //指向当前值的前一个值
[解决办法]
C/C++ code
#include<algorithm>#include <iostream>#include <list>#include <string>#include <vector>using  std::list;using  std::string;template<typename T>typename T::value_type mostFre(T first,T last){    //计算分配内存的大小    std::size_t amount=0;    T start=first;    while(start!=last)    {        amount++;        start++;    }    //定义类型别名    typedef std::vector<typename T::value_type> VecType;    //创建vector对象,用于保存输入序列的副本    VecType vec(amount);    VecType::iterator newFirst=vec.begin();    VecType::iterator nweLast=vec.end();    //将输入序列复制到vector对象std:uninitialized_copy(first,last,newFirst);    std::sort(newFirst,nweLast);        //对副本进行排序,使得相同值出现在相邻的位置        std::size_t maxOccu=0,occu=0;        //出现最频繁的次数,当前值的次数    VecType::iterator preIter=newFirst;    //指向当前值的前一个值    VecType::iterator maxOccuElemIt=newFirst;//指向当前出现最频繁的值    while(newFirst!=nweLast)    {        if(*newFirst!=*preIter)            //当前值与前一个不同        {            if(occu>maxOccu)            //当前值的出现次数为目前最大次数            {                maxOccu=occu;                maxOccuElemIt=preIter;            }            occu=0;        }        ++occu;        preIter=newFirst;        ++newFirst;    }    //最后一个值的出现次数与当前的最大次数进行比较                           就这个地方不怎么清楚啊,为什么还要进行最后一个值的比较???    if(occu>maxOccu)    //最后一个值的出现次数为目前最大次数    {        maxOccu=occu;        maxOccuElemIt=preIter;    }    return *maxOccuElemIt;}int main(){    string str = "123";     list<string> v;     v.push_back(str);     v.push_back(str);     v.push_back("22");     v.push_back(str);     v.push_back(str);     v.push_back("787");     v.push_back(str);     v.push_back("454");     v.push_back(str);    std::cout<< mostFre(v.begin(),v.end());}