C++ 算法 is_sorted_until() 函數用於查找範圍中的第一個未排序元素。這意味著它返回一個迭代器,指向範圍 [first, last) 中不遵循升序的第一個元素。
第一個版本使用運算符比較元素,第二個版本使用 comp 進行比較。
用法
default (1) template <class ForwardIterator>
ForwardIterator is_sorted_until (ForwardIterator first, ForwardIterator last);
custom (2) template <class ForwardIterator, class Compare>
ForwardIterator is_sorted_until (ForwardIterator first, ForwardIterator last,
Compare comp);
參數
first:指向要檢查的範圍中的第一個元素的前向迭代器。
last:一個隨機訪問迭代器,指向要檢查的範圍中過去的最後一個元素。
comp: 一個用戶定義的二元謂詞函數,它接受兩個參數,如果兩個參數按順序返回真,否則返回假。它遵循嚴格的弱排序來對元素進行排序。
返回值
如果範圍未排序,則返回指向第一個元素的迭代器,如果整個範圍已排序,則返回最後一個。
複雜度
複雜度在 first 和 last 之間是線性的:為每個元素調用 comp 直到發現不匹配。
數據競爭
訪問範圍 [first, last) 中的對象。
異常
如果 comp 或迭代器上的操作引發異常,則此函數將引發異常。
請注意,無效參數會導致未定義的行為。
例子1
讓我們看一個簡單的例子來演示 is_sorted_until() 的使用:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v = {3, 1, 4, 2, 5};
cout << boolalpha;
cout << "Before:is it sorted? "
<< (is_sorted_until(v.begin(), v.end()) == v.end()) << endl;
sort(v.begin(), v.end());
cout << "After:is it sorted? "
<< (is_sorted_until(v.begin(), v.end()) == v.end()) << endl;
return 0;
}
輸出:
Before:is it sorted? false After:is it sorted? true
例子2
讓我們看另一個簡單的例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool ignore_case(char a, char b) {
return (tolower(a) == tolower(b));
}
int main(void) {
vector<char> v = {'A', 'b', 'C', 'd', 'E'};
auto it = is_sorted_until(v.begin(), v.end());
cout << "First unsorted element = " << *it << endl;
it = is_sorted_until(v.begin(), v.end(), ignore_case);
if (it == end(v))
cout << "Entire vector is sorted." << endl;
return 0;
}
輸出:
First unsorted element = C Entire vector is sorted.
例子3
讓我們看另一個簡單的例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void) {
vector<int> v = {1, 2, 5, 3, 4};
auto it = is_sorted_until(v.begin(), v.end());
cout << "First unsorted element = " << *it << endl;
v[3] = 4;
it = is_sorted_until(v.begin(), v.end());
if (it == end(v))
cout << "Entire vector is sorted." << endl;
return 0;
}
輸出:
First unsorted element = 3
示例 4
讓我們看另一個簡單的例子:
#include <iostream> // std::cout
#include <algorithm> // std::is_sorted_until, std::prev_permutation
#include <array> // std::array
using namespace std;
int main () {
array<int,4> foo {2,4,1,3};
array<int,4>::iterator it;
do {
// try a new permutation:
prev_permutation(foo.begin(),foo.end());
// print range:
cout << "foo:";
for (int& x:foo) cout << ' ' << x;
it=is_sorted_until(foo.begin(),foo.end());
cout << " (" << (it-foo.begin()) << " elements sorted)\n";
} while (it!=foo.end());
cout << "the range is sorted!\n";
return 0;
}
輸出:
foo:2 3 4 1 (3 elements sorted) foo:2 3 1 4 (2 elements sorted) foo:2 1 4 3 (1 elements sorted) foo:2 1 3 4 (1 elements sorted) foo:1 4 3 2 (2 elements sorted) foo:1 4 2 3 (2 elements sorted) foo:1 3 4 2 (3 elements sorted) foo:1 3 2 4 (2 elements sorted) foo:1 2 4 3 (3 elements sorted) foo:1 2 3 4 (4 elements sorted) the range is sorted!
相關用法
- C++ Algorithm is_sorted()用法及代碼示例
- C++ Algorithm is_partitioned()用法及代碼示例
- C++ Algorithm is_heap()用法及代碼示例
- C++ Algorithm is_heap_until()用法及代碼示例
- C++ Algorithm inplace_merge()用法及代碼示例
- C++ Algorithm iter_swap()用法及代碼示例
- C++ Algorithm includes()用法及代碼示例
- C++ Algorithm remove_if()用法及代碼示例
- C++ Algorithm remove()用法及代碼示例
- C++ Algorithm max_element()用法及代碼示例
- C++ Algorithm set_union()用法及代碼示例
- C++ Algorithm next_permutation()用法及代碼示例
- C++ Algorithm upper_bound()用法及代碼示例
- C++ Algorithm minmax()用法及代碼示例
- C++ Algorithm remove_copy_if()用法及代碼示例
- C++ Algorithm random_shuffle()用法及代碼示例
- C++ Algorithm pop_heap()用法及代碼示例
- C++ Algorithm replace()用法及代碼示例
- C++ Algorithm set_intersection()用法及代碼示例
- C++ Algorithm lower_bound()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ Algorithm is_sorted_until()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。