Как найти максимальный элемент в динамическом массиве с помощью std::max_element()?
Ответ
Вам надо знать размер массива.
Например, если вы создали динамически массив, как показано ниже.
#include
//...
size_t n = 10;
int *a = new int[n];
// заполнение значениями элементов массива
int *max = std::max_element( a, a + n );
if ( max != a + n )
{
std::cout << "The maximum element is equal to " << *max << std::endl;
}
Или итератор можете объявить, используя спецификатор auto
auto max = std::max_element( a, a + n );
В данном конкретном случае нет необходимости проверять, что максимальный элемент найден. Но в общем случае, когда вы априори не знаете, чему равно значение переменной n, то такую проверку лучше делать.
Чтобы определить позицию найденного элемента, вы, в принципе, можете просто вычесть начало массива из найденного итератора, как, например,
auto pos = max - a;
Однако с точки зрения стиля программирования лучше воспользоваться стандартной функцией std::distance, объявленной в заголовке
#include
//...
auto = std::distance( a, max );
Это делает ваш код более гибким, так как массив вы можете заменить, например, каким-нибудь стандартным контейнером, который не имеет итераторов прямого доступа, и код все равно будет работать.
Комментариев нет:
Отправить комментарий