仿函数实现和递归实现
#include <iostream>
struct __Iter_less_iter
{
template<typename iteraotr1,typename iterator2>
bool operator() (iteraotr1 it1, iterator2 it2)
{
return *it1 < *it2;
}
};
__Iter_less_iter __iter_less_iter()
{
return __Iter_less_iter();
}
template<typename Iterator,typename comp>
Iterator __max_element(Iterator first, Iterator last, comp cmp)
{
if (first == last) {
return first;
}
Iterator reslut = first;
while (++first != last) { //last是指向最后一个元素的下一个位置
if (cmp(reslut, first)) {
reslut = first;
}
}
return reslut;
}
template<typename T>
T max_element(T first,T last)
{
return __max_element(first, last, __iter_less_iter());
}
template <typename T>
T max(std::initializer_list<T> L)
{
return *max_element(L.begin(), L.end());
}
template <typename T>
T maxnum(T& in)
{
return in;
}
template <typename T,typename... Args>
T maxnum(T first, Args... args)
{
return std::max(first, maxnum(args...));
}
int main()
{
std::cout << max({ 23,42,44,22,11 }) << std::endl;
std::cout << maxnum( 23,42,44,22,11 ) << std::endl;
return 0;
}