题目要求:编写一个函数模板,接受表示未知类型迭代器的一对值,找出在序列中出现的最频繁的值。
自己写的代码没有考虑存在出现次数最多且相同的情况,也就是默认输出第一次最多的数值。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//找到容器中出现次数最多的值
template <typename T>
typename T::value_type find(T first, T last) {
//将容器中的元素复制到一个vector
size_t amount = 0;
for(T iter = first; iter != last; ++iter) amount++;
typedef vector<typename T::value_type> VectType;
VectType vect(amount);
typename VectType::iterator newFirst = vect.begin();
typename VectType::iterator newLast = vect.end();
uninitialized_copy(first, last, newFirst);
sort(newFirst, newLast);
//统计出现次数最多的值
size_t tmp, cnt=0;
size_t mmax = 0;
typename VectType::iterator iter = newFirst;
while(newFirst != newLast) {
if(*iter != *newFirst) {
if(cnt > mmax