std::is_sorted_until
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody>| Определено в заголовочном файле <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, Compare comp ); |
(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, если первый аргумент "меньше", чем второй.Определение сравнения должно быть эквивалентно:
Использование |
| Требования к типам | ||
-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 и lastfirst 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());
const int N = 6;
int nums[N] = {3, 1, 4, 1, 5, 9};
const int 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) |
проверяет, отсортирован ли диапазон по возрастанию (шаблон функции) |