std::minmax_element
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody>| Определено в заголовочном файле <algorithm>
|
||
template< class ForwardIt > std::pair<ForwardIt,ForwardIt> minmax_element( ForwardIt first, ForwardIt last ); |
(1) | |
template< class ForwardIt, class Compare > std::pair<ForwardIt,ForwardIt> minmax_element( ForwardIt first, ForwardIt last, Compare comp ); |
(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.Определение сравнения должно быть эквивалентно:
Использование |
| Требования к типам | ||
-ForwardIt должен соответствовать требованиям ForwardIterator.
| ||
Возвращаемое значение
std::make_pair(first, first), если диапазон пуст. Если несколько элементов, эквивалентных наименьший элемент, итератор на первый такой элемент не вернулся. Если несколько элементов, эквивалентных наибольший элемент, итератор на последний такой элемент возвращается.std::make_pair(first, first) if the range is empty. If several elements are equivalent to the smallest element, the iterator to the first such element is returned. If several elements are equivalent to the largest element, the iterator to the last such element is returned.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Сложность
N = std::distance(first, last).N = std::distance(first, last).Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Возможная реализация
| Первый вариант |
|---|
template<class ForwardIt>
std::pair<ForwardIt, ForwardIt>
minmax_element(ForwardIt first, ForwardIt last)
{
typedef typename std::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;
else if (!(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
См. также
| возвращает наименьший элемент в диапазоне (шаблон функции) | |
| возвращает наибольший элемент в диапазоне (шаблон функции) |