Hãy giải pháp C++ 17 ra khỏi con đường cho tìm kiếm tàu do thám tương lai:
constexpr int IntArray[] = {1, 5, 10, 12, 17};
constexpr int min = *std::min_element(std::begin(IntArray), std::end(IntArray));
static_assert(min == 1);
C++ 11 là kén chọn hơn với constexpr
chức năng, vì vậy chúng tôi phải tung ra một thuật toán đệ quy. Điều này là một đơn giản, thẳng một:
template <class T>
constexpr T &constexpr_min(T &a, T &b) {
return a > b ? b : a;
}
template <class T>
constexpr T &arrayMin_impl(T *begin, T *end) {
return begin + 1 == end
? *begin
: constexpr_min(*begin, arrayMin_impl(begin + 1, end));
}
template <class T, std::size_t N>
constexpr T &arrayMin(T(&arr)[N]) {
return arrayMin_impl(arr, arr + N);
}
constexpr int IntArray[] = {1, 5, 10, 12, 17};
constexpr int min = arrayMin(IntArray);
See it live on Coliru
Nó có thể là có thể làm điều đó với đệ quy [ 'constexpr'] (http://en.cppreference.com/w/cpp/language/constexpr) chức năng. –
Trong C++, có thể sử dụng mẫu meta-programming để giải quyết nó. – vsz