C++算法 is_sorted_until()函数用于查找参数中的第一个未排序元素。
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);
fist:一个正向迭代器,指向要检查参数内的第一个元素。
last:一个随机访问迭代器,它指向要检查参数内的最后一个最后一个元素。
comp :用户定义的二进制谓词函数,该函数接受两个参数,如果两个参数顺序正确,则返回true,否则返回false。
如果参数未排序,则将迭代器返回到第一个元素,如果整个参数已排序,则返回最后一个迭代器。
让我们看一个简单的示例来演示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
让我们看另一个简单的例子:
#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.
让我们看另一个简单的例子:
#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
让我们看另一个简单的例子:
#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!
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)