// Using a const reference as an alternative to a call-by-value parameter (avoids copying large objects). // This is a real-world scenario - in contrast to some of the previous examples. #include #include #include // Assume as precondition that vec holds at least one element. // In this version vec is pass by const reference, which is more efficient than // passing it by value (and by a copy). void vector_min_max(const std::vector& vec, double& min, int& min_index, double& max, int&max_index){ double cur_max{vec[0]}, cur_min{vec[0]}; int cur_min_index{0}, cur_max_index{0}; for(int i = 0; i < vec.size(); ++i){ if (vec[i] > cur_max){ cur_max = vec[i]; cur_max_index = i; } if (vec[i] < cur_min){ cur_min = vec[i]; cur_min_index = i; } } min = cur_min; max = cur_max; min_index = cur_min_index; max_index = cur_max_index; } int main () { using namespace std; vector v{1.1, -3.5, 7, 9, 0, -0.5}; double mi, ma; int i_mi, i_ma; vector_min_max(v, mi, i_mi, ma, i_ma); cout << "Min: " << mi << " at: " << i_mi << endl; cout << "Max: " << ma << " at: " << i_ma << endl; }