#include <iostream>
#include <vector>

template <typename T>
T my_max(const T &begin, const T &end) {
	T result = begin, it = begin;
	while (++it, it != end) {
		if (*it > *result) {
			result = it;
		}
	}
	return result;
}

int main() {
	int array[] = {1,3,5,1,2,7,6,5};
	std::cout << *my_max(&array[0], &array[9]) << std::endl;
	std::vector<int> vector;
	vector.push_back(0);
	vector.push_back(3);
	vector.push_back(8);
	vector.push_back(2);
	vector.push_back(1);
	vector.push_back(6);
	std::cout << *my_max(vector.begin(), vector.end()) << std::endl;
	return 0;
}