当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ upper_bound用法及代码示例


upper_bound()是在头文件中定义的C++标准库函数。它返回一个迭代器,该迭代器指向范围 [first, last] 中大于 value 的第一个元素,如果没有找到这样的元素,则返回最后一个元素。范围内的元素应已排序或至少已根据 val 进行分区。

模板:

Syntax 1: ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& val); 

Syntax 2: ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& val, Compare comp); 

first, last: The range used is [first, last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last. 
val: Value of the upper bound to search for in the range. 
comp: Binary function that accepts two arguments (the first of the type pointed by ForwardIterator, and the second, always val), and returns a value convertible to bool. The function shall not modify any of its arguments. This can either be a function pointer or a function object. 

Return type : An iterator to the upper bound of val in the range. If all the element in the range compare less than val, the function returns last.

例子:

Input : 10 20 30 30 40 50
Output : upper_bound for element 30 is at index 4

Input : 10 20 30 40 50
Output : upper_bound for element 45 is at index 4

Input : 10 20 30 40 50
Output : upper_bound for element 60 is at index 5

下面是一些C++程序来说明std::upper_bound的使用:

CPP


// CPP program to illustrate using 
// std :: upper_bound with vectors
#include <bits/stdc++.h>
// Driver code
int main()
{
    std::vector<int> v{ 10, 20, 30, 40, 50 };
    // Print vector
    std::cout << "Vector contains :";
    for (int i = 0; i < v.size(); i++)
        std::cout << " " << v[i];
    std::cout << "\n";
    std::vector<int>::iterator upper1, upper2;
    // std :: upper_bound
    upper1 = std::upper_bound(v.begin(), v.end(), 35);
    upper2 = std::upper_bound(v.begin(), v.end(), 45);
    std::cout << "\nupper_bound for element 35 is at position : " 
              << (upper1 - v.begin());
    std::cout << "\nupper_bound for element 45 is at position : "
              << (upper2 - v.begin());
    return 0;
}

输出:

Vector contains : 10 20 30 40 50
upper_bound for element 35 is at position : 3
upper_bound for element 45 is at position : 4

CPP


// CPP program to illustrate using 
// std :: upper_bound with arrays
#include <bits/stdc++.h>
using namespace std;
// Main Function
int main()
{
    int arr[] = { 10, 20, 30, 40, 50 };
    // Print elements of array
    cout << "Array contains :";
    for (int i = 0; i < 5; i++)
        cout << " " << arr[i];
    cout << "\n";
    // using upper_bound
    int upper1 = upper_bound(arr, arr+5, 35) - arr;
    int upper2 = upper_bound(arr, arr+5, 45) - arr;
    cout << "\nupper_bound for element 35 is at position : " 
              << (upper1);
    cout << "\nupper_bound for element 45 is at position : "
              << (upper2);
    return 0;
}

输出:

Array contains : 10 20 30 40 50
upper_bound for element 35 is at position : 3
upper_bound for element 45 is at position : 4

时间复杂度:执行的比较次数是第一个和最后一个之间的距离的对数。即(最多 log2(last - first) + O(1) 比较)。

Important Points

  • std::upper_bound() 返回一个迭代器,指向传递给它的值的上限。
  • std::upper_bound() 仅适用于排序序列。即具有排序元素的向量或具有排序元素的数组。


相关用法


注:本文由纯净天空筛选整理自佚名大神的英文原创作品 upper_bound in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。