Date:2022.5.20
开发内容:基本算法
https://moonweb.top 版权所有

/*******************************************************
//
//      Date:2022.5.20
//	开发内容:基本算法
// 
//	https://moonweb.top 版权所有
//
********************************************************/
#pragma once

// numeric
template<class iterator,class T>
T accumulate(iterator first, iterator end, T val)		//累加区间内数组,从val开始
{
	T sum = val;
	for (auto ite = first; ite != end; ite++)
	{
		sum += *ite;
	}
	return sum;
}

template <class T>			//取a,b中的最大值
T max(const T& a, const T& b)
{
	return a > b:a:b;
}

template <class T,class comp>
T max(const T& a, const T& b,comp c)
{
	return c(a, b) :a:b;
}

template <class T>			//取a,b中的最大值
T min(const T& a, const T& b)
{
	return a < b:a:b;
}

template <class T, class comp>
T min(const T& a, const T& b, comp c)
{
	return c(a, b) :a:b;
}

template <class T>
void swap(const T& a, const T& b)		//交换a,b的值
{
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;

	/*int temp = a;
	a = b;
	b = temp;*/

	/*a = a + b;
	b = a - b;
	a = a - b;*/
}


template <class iterator>
iterator max_element(iterator first, iterator end)		 //求范围内最大值的迭代器
{
	if (first > end) return nullptr;
	iterator ans = first;
	first++;
	for (auto ite = first; ite != end; ite++)
	{
		if (*ite > *ans) ans = ite;
	}
	return ans;
}

template <class iterator>
iterator min_element(iterator first, iterator end)	 //求范围内最小值的迭代器
{
	if (first > end) return nullptr;
	iterator ans = first;
	first++;
	for (auto ite = first; ite != end; ite++)
	{
		if (*ite < *ans) ans = ite;
	}
	return ans;
}

template<class iterator, class T >
int count(iterator first, iterator end,const T& val)						//求范围内某值的元素个数
{
	int ans = 0;
	for (auto ite = first; ite != end; ite++)
	{
		if (*ite == val) ans++;
	}
	return ans;
}

template<class iterator,class T>
iterator find(iterator first, iterator end, T& val)		//求范围内第一次出现的某个值,如果不存在则返回尾迭代器
{
	while (firsr != end && *first != val) ++first;
	return first;
}


Q.E.D.