#include <tuple>

#include <stdexcept>


template <typename T>

std::tuple<T*, T*> minmax (T* b, T* e) {

    if (e - b == 0) throw std::length_error("length cannot be 0");

    if (e - b <= 1) return std::make_tuple(b, b);


    T* pMin;

    T* pMax;

    if ((e - b) % 2 == 0) {

        pMin = b;

        pMax = b;

    } else {

        if (*b < *(b + 1)) {

            pMin = b;

            pMax = b + 1;

        } else {

            pMin = b + 1;

            pMax = b;

        }

    }


    for (auto p = b + 2; p < e - 1; p += 2) {

        if (*p < *(p + 1)) {

            if (*p < *pMin) pMin = p;

            if (*(p + 1) > *pMax) pMax = p + 1;

        } else {

            if (*p > *pMax) pMax = p;

            if (*(p + 1) < *pMin) pMin = p + 1;

        }

    }


    return std::make_tuple(pMin, pMax);

}


이거 길이 줄이는 법 없을까?

비슷한구문 반복되니까 보기 싫은데