std::is_sorted_until
![]() | Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
Определено в заголовочном файле <algorithm> | ||
template<class ForwardIt > ForwardIt is_sorted_until( ForwardIt first, ForwardIt last ); | (1) | (начиная с C++11) |
template<class ForwardIt, class Compare > ForwardIt is_sorted_until( ForwardIt first, ForwardIt last, | (2) | (начиная с C++11) |
[first, last)
и находит самый большой набор начиная с first
, в котором элементы отсортированы в порядке возрастания. Первая версия функции используется operator< для сравнения элементов, второй использует данную функцию сравнения comp
.[first, last)
and finds the largest range beginning at first
in which the elements are sorted in ascending order. The first version of the function uses operator< to compare the elements, the second uses the given comparison function comp
.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Содержание |
[править]Параметры
first, last | — | диапазон элементов для изучения Оригинал: the range of elements to examine Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
comp | — | объект функции сравнения (т.е. объект, удовлетворяющий требованиям Compare), который возвращает true, если первый аргумент "меньше", чем второй. Определение сравнения должно быть эквивалентно: bool cmp(const Type1 &a, const Type2 &b); Использование noexcept(начиная с C++11) желательно но не обязательно. Параметры не обязаны передаваться по const&, но не должны модифицироваться. Они должны быть способны принимать все значения типа (даже const) |
Требования к типам | ||
-ForwardIt должен соответствовать требованиям ForwardIterator . |
[править]Возвращаемое значение
first
, в котором элементы отсортированы в порядке возрастания. То есть, последний it
итератора, для которых диапазон [first, it)
сортируются.first
in which the elements are sorted in ascending order. That is, the last iterator it
for which range [first, it)
is sorted.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]Сложность
first
и last
first
and last
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]Возможная реализация
Первый вариант |
---|
template<class ForwardIt> ForwardIt is_sorted_until(ForwardIt first, ForwardIt last){if(first != last){ ForwardIt next = first;while(++next != last){if(*next <*first)return next; first = next;}}return last;} |
Второй вариант |
template<class ForwardIt, class Compare > ForwardIt is_sorted_until(ForwardIt first, ForwardIt last, Compare comp){if(first != last){ ForwardIt next = first;while(++next != last){if(comp(*next, *first))return next; first = next;}}return last; |
[править]Пример
#include <iostream>#include <algorithm>#include <iterator>#include <random> int main(){std::random_device rd;std::mt19937 g(rd());constint N =6;int nums[N]={3, 1, 4, 1, 5, 9}; constint min_sorted_size =4;int sorted_size =0;do{std::random_shuffle(nums, nums + N, g);int*sorted_end = std::is_sorted_until(nums, nums + N); sorted_size =std::distance(nums, sorted_end); for(auto i : nums)std::cout<< i <<' ';std::cout<<" : "<< sorted_size <<" initial sorted elements\n";}while(sorted_size < min_sorted_size);}
Возможный вывод:
4 1 9 5 1 3 : 1 initial sorted elements 4 5 9 3 1 1 : 3 initial sorted elements 9 3 1 4 5 1 : 1 initial sorted elements 1 3 5 4 1 9 : 3 initial sorted elements 5 9 1 1 3 4 : 2 initial sorted elements 4 9 1 5 1 3 : 2 initial sorted elements 1 1 4 9 5 3 : 4 initial sorted elements
[править]См. также
(C++11) | проверяет, отсортирован ли диапазон по возрастанию (шаблон функции) |