#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);
}
이거 길이 줄이는 법 없을까?
비슷한구문 반복되니까 보기 싫은데
OOP
성능 조금이라도 쥐어짜볼라고 저렇게짠건데 저걸 OOP로 바꾸면..
삼항연산자
아니면 *(p + 1) 을 p[1]로 바꿔
삼항