//编写一个函数模板,接受表示未知类型迭代器的一对值,找出序列中出现得最频繁得值
#include<iostream>
#include<tchar.h>
#include<string>
using namespace std;
template<typename t> t::value_type mostf(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 newlast = vec.end();
//将输入序列复制到vector对象
std::_uninitialized_copy(first, last, newfirst);
std::sort(newfirst, newlast);//对副本序列排序,使得相同得值出现再相邻位置
std::size_t maxoccu = 0, occu = 0;//出现最频繁得次数,当前值得出现次数
vectype::iterator prelter = newfirst;//指向当前值得前一个值
vectype::iterator maxoccuelement = newfirst;//指向当前出现最频繁得值
while (newfirst != newlast)
{
if (*newfirst != *prelter)//当前值与前一个值不同
{
if (occu > maxoccu)//当前值得出现次数卫目前最大次数
{
maxoccu = occu;//修改最大次数
maxoccuelement = prelter;//修改指向当前出现最频繁得值得迭代器
}
occu = 0;
}
++occu;
prelter = newfirst;
++newfirst;
}
//最后一个值得出现次数与当前得最大次数进行比较
if (occu > maxoccu)
{
maxoccu = ocuu;
maxoccuelement = prelter;
}
return *maxoccuelement;
}
16.12
最新推荐文章于 2022-06-21 09:38:08 发布