#c
#c
Вопрос:
Я очень новичок в C , я только начал изучать его на этой неделе.
Как указано в вопросе, я пытаюсь найти наибольшее и наименьшее значение в векторе vector<int> pricelist{10,23,45,12,32}
, поэтому я ожидаю получить возврат 0 и 2.
public:
Prices(const int lowestPriceIn, const int highestPriceIn)
: lowestPrice(lowestPriceIn), highestPrice(highestPriceIn) {
}
Я хочу поместить функцию в метод lowestNHighestPrices()
.
Я предполагаю, что могу создать цикл, который повторяет вектор, но как мне определить, какое значение будет наименьшим и наибольшим? И как мне получить только индексы, а не элементы?
У меня есть 2 метода get, которые возвращают 2 переменные int, одну для наименьшего значения, а другую для наибольшего.
int getlowestPrice() const {
return lowestPrice;
}
int gethighestPrice() const {
return highestPrice;
}
Комментарии:
1. Найдите, как получить минимальные / максимальные значения в векторе. Затем найдите, как получить индекс из итератора. Здесь много раз задавали вопросы и отвечали на них.
Ответ №1:
Вы могли бы использовать std::minmax_element
для получения как min, так и max и их соответствующих индексов за один раз следующим образом:
std::vector<int> v {10,23,45,12,32};
auto mm = std::minmax_element(v.begin(), v.end());
auto idx_min = std::distance(v.begin(), mm.first);
auto idx_max = std::distance(v.begin(), mm.second);
Комментарии:
1. Я продолжаю получать сообщение об ошибке в пространстве имен std нет члена minmax_element. Почему это так?
2. @LovesPie вы включили
<algorithm>
заголовок? Поддерживает ли ваш компилятор C 11?3. Извините, не совсем уверен, что такое заголовок <algorithm> (я сказал, что я очень новичок в языке) …. и да, он поддерживает c 11.
4. @LovesPie в файле
.cpp
кода, который вы вызываетеstd::minmax_element
, у вас есть#include <algorithm>
? Причинаstd::minmax_element
определяется в этом заголовке.5. О, хорошо, его там нет. Я не уверен, разрешено ли мне изменять .cpp-файл, потому что он используется для проверки, работает ли мой код.
Ответ №2:
int getlowestPrice() const {
vector<int>::iterator it = std::min_element(pricelist);
lowestPrice = it - pricelist.begin();
return lowestPrice;
}
int gethighestPrice() const {
vector<int>::iterator it = std::max_element(pricelist);
highestPrice = it - pricelist.begin();
return highestPrice;
}
Комментарии:
1. Как выполняется
vector<int> iterator it
компиляция?