📜  C++ STL-algorithm.is_sorted_until()函数(1)

📅  最后修改于: 2023-12-03 14:39:50.599000             🧑  作者: Mango

C++ STL-algorithm.is_sorted_until()函数

简介

C++ STL提供了一组函数来操作序列容器,这组函数被称为算法。其中包括了is_sorted_until()函数,用于查找序列容器的第一个非递增元素。

该函数返回的结果是一个迭代器,指向序列容器中第一个不满足递增关系的元素位置。如果序列中所有元素都满足递增关系,则返回该序列容器的尾后迭代器。

函数原型
template< class ForwardIt >
ForwardIt is_sorted_until( ForwardIt first, ForwardIt last );

template< class ForwardIt, class Compare >
ForwardIt is_sorted_until( ForwardIt first, ForwardIt last, Compare comp );
  • ForwardIt: 为正向迭代器,指向待查找非递增元素的序列容器的起始位置。
  • first: 待查找非递增元素的容器首迭代器。
  • last: 待查找非递增元素的容器尾迭代器。
  • comp: 自定义比较函数对象,用于指定元素间的比较关系,可选参数。
参数要求
  • 序列容器必须是有序的,即满足递增关系。
返回值
  • 如果序列容器中所有元素都满足递增关系,则该函数返回序列容器的尾后迭代器。
  • 否则,返回第一个非递增元素位置的迭代器。
代码示例
#include <iostream>
#include <algorithm>
#include <vector>

bool less_than(int a, int b) {
    return a < b;
}

int main() {
    std::vector<int> v1 = {1, 2, 3, 4, 5, 6};
    std::vector<int> v2 = {1, 2, 3, 6, 5, 4};

    auto iter1 = std::is_sorted_until(v1.begin(), v1.end());
    auto iter2 = std::is_sorted_until(v2.begin(), v2.end());

    auto iter3 = std::is_sorted_until(v1.begin(), v1.end(), less_than);
    auto iter4 = std::is_sorted_until(v2.begin(), v2.end(), less_than);

    std::cout << "v1 is sorted until: " << std::distance(v1.begin(), iter1) << std::endl;
    std::cout << "v2 is sorted until: " << std::distance(v2.begin(), iter2) << std::endl;
    std::cout << "v1 is sorted until (using custom less_than): " << std::distance(v1.begin(), iter3) << std::endl;
    std::cout << "v2 is sorted until (using custom less_than): " << std::distance(v2.begin(), iter4) << std::endl;

    return 0;
}

以上代码输出结果如下:

v1 is sorted until: 6
v2 is sorted until: 3
v1 is sorted until (using custom less_than): 6
v2 is sorted until (using custom less_than): 3

从测试结果可以看出,当序列容器是有序的时候,is_sorted_until()函数返回的是容器的尾后迭代器;当序列容器不满足递增关系时,该函数返回容器中第一个非递增元素位置的迭代器。同时该函数也可以通过自定义比较函数对象来指定元素间的比较关系。