Функция для поиска минимальных и максимальных значений в векторе и возврата их индексов

#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. Найдите, как получить минимальные / максимальные значения в векторе. Затем найдите, как получить индекс из итератора. Здесь много раз задавали вопросы и отвечали на них.

2. std::minmax_element

Ответ №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 компиляция?