Как я могу получить максимальное (или минимальное) значение в векторе на C ++ ?
Я видел несколько решений для этого в Google, но ни одно из них не имело для меня смысла :(
Может ли кто-нибудь объяснить простым и понятным способом, как получить максимальное или минимальное значение из вектора, пожалуйста? и я ошибаюсь, предполагая, что это будет более или менее то же самое с массивом?
Мне нужен итератор, верно? Я пробовал, max_element
но продолжал получать ошибку?
vector<int>::const_iterator it;
it = max_element(cloud.begin(), cloud.end());
ошибка: запрос на член "begin" в "облаке" неклассового типа "int [10]"
РЕДАКТИРОВАТЬ: Я не смог ответить на свой вопрос ??? так что положу сюда ...
Вау, спасибо за быстрые ответы! Я закончил тем, что сделал это, как думаешь, это нормально?
for (unsigned int i = 0; i < cdf.size(); i++)
if (cdf[i] < cdfMin)
cdfMin = cdf[i];
где cdf
вектор.
cloud
это не контейнер STL, а скорееint[10]
. По сути,cloud
не имеет члена.begin()
. Возможно, вам захочется получить базовую книгу по C ++, если вы не занимаетесь только этим.int[10]
». Как же тогда это может быть вектор?Ответы:
Используя флаги компиляции c ++ 11 / c ++ 0x, вы можете
В противном случае напишите свой:
Смотрите в прямом эфире на http://ideone.com/aDkhW :
Да, и используйте,
std::minmax_element(...)
если вам нужны оба сразу: /источник
Если вы хотите использовать эту функцию
std::max_element()
, вам нужно сделать это:Надеюсь, это поможет.
источник
*
в*max_element
?Позволять,
Если вектор отсортирован в порядке возрастания или убывания, вы можете найти его со сложностью O (1).
Для вектора в порядке возрастания первый элемент - это наименьший элемент, вы можете получить его по v [0] (индексирование на основе 0), а последний элемент - самый большой элемент, вы можете получить его по v [sizeOfVector-1].
Если вектор отсортирован в порядке убывания, то последний элемент является наименьшим элементом, вы можете получить его по v [sizeOfVector-1], а первый элемент - это самый большой элемент, вы можете получить его по v [0].
Если вектор не отсортирован, вам нужно перебрать вектор, чтобы получить наименьший / наибольший элемент. В этом случае временная сложность составляет O (n), здесь n - размер вектора.
Вы можете использовать итератор,
Вы можете вычислить его в разделе ввода (когда вам нужно найти наименьший или наибольший элемент из заданного вектора)
Также вы можете получить самый маленький / самый большой элемент с помощью встроенных функций
Вы можете получить наименьший / наибольший элемент любого диапазона, используя эту функцию. Такие как,
Я использовал звездочку (*) перед функциями min_element () / max_element (). Потому что оба они возвращают итератор. Все коды написаны на c ++.
источник
min_element
иmax_element
вернуть итератор , а не указатель. Однако, чтобы быть технически правильным, указатель - это подмножество итератора. См .: stackoverflow.com/questions/2728190/…Предполагая, что облако - это
int cloud[10]
вы можете сделать это так:int *p = max_element(cloud, cloud + 10);
источник
Вы можете распечатать его напрямую, используя функцию max_element / min_element. Например:
источник
В С ++ 11 вы можете использовать такую функцию:
источник
std::max_element
потому что ...?Если вы хотите использовать итератор, вы можете выполнить новое размещение с массивом.
Обратите внимание на отсутствие
()
в конце, это важно. Это создает класс массива, который использует эту память в качестве хранилища и имеет такие функции STL, как итераторы.(Кстати, это C ++ TR1 / C ++ 11)
источник
Вы можете использовать max_element, чтобы получить максимальное значение в векторе. Max_element возвращает итератор к наибольшему значению в диапазоне или к последнему, если диапазон пуст. Поскольку итератор похож на указатели (или вы можете сказать, что указатель - это форма итератора), вы можете использовать * перед ним, чтобы получить значение. Итак, в соответствии с проблемой вы можете получить максимальный элемент в векторе как:
Это даст вам максимальный элемент в вашем векторном «облаке». Надеюсь, поможет.
источник
Просто это:
источник
int cloud[10];
использования магических чисел.Полный путь ... в C
источник
vector
for
цикле. В целом, очень плохой ответ.