Как можно вычислить максимальное и минимальное значение массива?
Коротко, ты можешь не сохранять минимальное и максимальное значение отдельно, т.к. они всегда доступны по индексу в массиве. Другое дело - это что у тебя нет этих индексов до начала прохода по массиву, тебе их просто неоткуда взять. Этот момент и определяет верное начальное состояние в решении твоей задачи. Отсутствие этого момента и приводит к тому, что твой код сейчас работает неверно.
Тебе нужны только индексы тех элементов, которые ты считаешь как минимальный и максимальный.size_t min_value_index = 0;
size_t max_value_index = 0;
Я выбираю инициализацию в 0 для того чтобы изначально обозначить первый же элемент массива и как минимальный, и как максимальный одновременно. Именно так я определю начальное состояние алгоритма.
Далее надо сделать проход по массиву.for( size_t index = 1; index < stream_length; ++index )
{
   // ...
}
Мне незачем сравнивать элемент по нулевому индексу с самим собой, т.к. я изначально уже выбрал его, поэтому проход по массиву можно начать со следующего элемента.
Теперь надо записать условие выбора минимального и максимального значений.for( size_t index = 1; index < stream_length; ++index )
{
   if( stream[ index ] < stream[ min_value_index ] )
   {
      min_value_index = index;
   }
   
   if( stream[ index ] > stream[ max_value_index ] )
   {
      max_value_index = index;
   }
}
При записи условий очень важно соблюдать логику. Нужно писать так, чтобы выражение читалось как можно легче, используя слова в названиях и порядок записи операций.
Тут видно что если по текущему индексу значение меньше запомненного минимального, то надо запомнить текущий индекс как индекс минимального значения. И для максимального значения точно так же.
По завершении цикла в min_value_index будет гарантированно лежать индекс минимального значения массива, а в max_value_index - индекс максимального.Как работает этот код.
Самое правильное, так:cout << *min_element(begin(c), end(c)) << endl;
cout << *max_element(begin(c), end(c)) << endl;
Можно такstd::partial_sort(begin(с), begin(с) + 1, end(с));
auto m = с.front();
std::partial_sort(begin(с), begin(с) + 1, end(с), greater<long>());
auto M = с.front();