统计出现最多次数的程序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());} 