当前位置:网站首页>可变参数模板实现max(接受多个参数,两种实现方式)

可变参数模板实现max(接受多个参数,两种实现方式)

2022-06-24 10:22:00 君莫vv

仿函数实现和递归实现

#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;
}

原网站

版权声明
本文为[君莫vv]所创,转载请带上原文链接,感谢
https://blog.csdn.net/hfwyydy/article/details/125400774