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() 仅适用于排序序列。即具有排序元素的向量或具有排序元素的数组。
相关用法
- C++ ungetc()用法及代码示例
- C++ ungetwc()用法及代码示例
- C++ utility swap用法及代码示例
- C++ utility make_pair用法及代码示例
- C++ utility forward用法及代码示例
- C++ utility move用法及代码示例
- C++ utility move_if_noexcept用法及代码示例
- C++ utility declval用法及代码示例
- C++ utility piecewise_construct用法及代码示例
- C++ utility rel_ops用法及代码示例
- C++ unordered_multimap bucket_size()用法及代码示例
- C++ unordered_multimap size()用法及代码示例
- C++ unordered_multimap reserve()用法及代码示例
- C++ unordered_multimap max_size()用法及代码示例
- C++ unordered_multimap rehash()用法及代码示例
- C++ unordered_multimap max_bucket_count()用法及代码示例
- C++ unordered_multimap max_load_factor()用法及代码示例
- C++ unordered_multimap load_factor()用法及代码示例
- C++ unordered_multimap key_eq()用法及代码示例
- C++ unordered_multimap hash_function()用法及代码示例
- C++ unordered_multimap find()用法及代码示例
- C++ unordered_multimap equal_range()用法及代码示例
- C++ unordered_multimap emplace_hint()用法及代码示例
- C++ unordered_multimap empty()用法及代码示例
- C++ unordered_multimap emplace()用法及代码示例
注:本文由纯净天空筛选整理自佚名大神的英文原创作品 upper_bound in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。