std::minmax_element
![]() | Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
Определено в заголовочном файле <algorithm> | ||
template<class ForwardIt > std::pair<ForwardIt,ForwardIt> | (1) | |
template<class ForwardIt, class Compare > std::pair<ForwardIt,ForwardIt> | (2) | |
[first, last)
. Первый вариант используется operator< для сравнения значений, вторая версия использует данную функцию сравнения comp
.[first, last)
. The first version uses operator< to compare the values, the second version uses the given comparison function comp
.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Содержание |
[править]Параметры
first, last | — | вперед итераторы определении диапазона для изучения Оригинал: forward iterators defining the range to examine Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
cmp | — | объект функции сравнения (т.е. объект, удовлетворяющий требованиям Compare), который возвращает true, если if *a is less than *b .Определение сравнения должно быть эквивалентно: bool cmp(const Type1 &a, const Type2 &b); Использование noexcept(начиная с C++11) желательно но не обязательно. Параметры не обязаны передаваться по const&, но не должны модифицироваться. Они должны быть способны принимать все значения типа (даже const) |
Требования к типам | ||
-ForwardIt должен соответствовать требованиям ForwardIterator . |
[править]Возвращаемое значение
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]Сложность
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]Возможная реализация
Первый вариант |
---|
template<class ForwardIt>std::pair<ForwardIt, ForwardIt> minmax_element(ForwardIt first, ForwardIt last){typedeftypenamestd::iterator_traits<ForwardIt>::value_type value_t;return std::minmax_element(first, last, std::less<value_t>());} |
Второй вариант |
template<class ForwardIt, class Compare>std::pair<ForwardIt, ForwardIt> minmax_element(ForwardIt first, ForwardIt last, Compare comp){std::pair<ForwardIt, ForwardIt> result(first, first); if(first == last)return result;if(++first == last)return result; if(comp(*first, *result.first)){ result.second= result.first; result.first= first;}else{ result.second= first;}while(++first != last){ ForwardIt i = first;if(++first == last){if(comp(*i, *result.first)) result.first= i;elseif(!(comp(*i, *result.second))) result.second= i;break;}else{if(comp(*first, *i)){if(comp(*first, *result.first)) result.first= first;if(!(comp(*i, *result.second))) result.second= i;}else{if(comp(*i, *result.first)) result.first= i;if(!(comp(*first, *result.second))) result.second= first;}}}return result;} |
[править]Пример
#include <algorithm>#include <iostream>#include <vector> int main(){std::vector<int> v ={3, 9, 1, 4, 2, 5, 9}; auto result = std::minmax_element(v.begin(), v.end());std::cout<<"min element at: "<<(result.first- v.begin())<<'\n';std::cout<<"max element at: "<<(result.second- v.begin())<<'\n';}
Вывод:
min element at: 2 max element at: 6
[править]См. также
возвращает наименьший элемент в диапазоне (шаблон функции) | |
возвращает наибольший элемент в диапазоне (шаблон функции) |