#include #include #include /* return the second-largest element of an array * of N integer values (must contain at least two values) */ auto second_of(const int N, const int* const x) { assert(N >= 2); auto largest = x[0]; // smallest possible int value auto second_largest = std::numeric_limits::min(); for(auto i = 1; i < N; i++) if(x[i] > largest) { second_largest = largest; largest = x[i]; } else if(x[i] > second_largest) second_largest = x[i]; return second_largest; } int main() { constexpr auto fixed_array_size = 5; constexpr int x[fixed_array_size] = {4, 0, 6, 5, 2}; const auto t = second_of(fixed_array_size, x); std::cout << t << "\n"; } /* Which of these allowed implicit-type declarations would you actually use in programming practice? I dont think I would use any of these. Auto takes longer time to write than int and makes the code less readable. */