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;
}
统计出现次数最多的程序
最新推荐文章于 2022-10-14 09:30:30 发布