c++ lower_bound和upper_bound
时间: 2023-10-15 07:26:08 浏览: 276
lower_bound和upper_bound都是C++标准库中的算法函数,用于在有序序列中查找某个值的下界和上界。
lower_bound函数接受两个参数:第一个参数是指向有序序列的起始位置的迭代器,第二个参数是要查找的值。它返回一个迭代器,指向序列中第一个大于或等于给定值的元素。如果所有元素都小于给定值,则返回指向序列尾部的迭代器。
upper_bound函数也接受两个参数,与lower_bound函数类似。它返回一个迭代器,指向序列中第一个大于给定值的元素。换句话说,upper_bound返回的迭代器指向的元素是大于给定值的最小元素。如果所有元素都小于或等于给定值,则返回指向序列尾部的迭代器。
这两个函数通常用于有序序列中进行二分查找。可以根据返回的迭代器判断是否找到了目标值,以及得到目标值在序列中的位置或范围。
注意:lower_bound和upper_bound函数要求序列是有序的,否则结果将不确定。
相关问题
c++中lower_bound和upper_bound函数用法
在 C++ 中,`lower_bound` 和 `upper_bound` 是 `<algorithm>` 模块提供的两个算法,用于在一个已排序的容器(如向量、列表、集合等)中查找指定元素的位置。这两个函数都是模板函数,可以接受任意类型的比较器(比如默认的 `<` 运算符),以及迭代器作为输入。
1. **lower_bound**:
- 函数原型:`template <class _RandomAccessIterator, class _Tp, class _Compare = less<_Tp>> _RandomAccessIterator lower_bound(_RandomAccessIterator first, _RandomAccessIterator last, const _Tp& value, _Compare comp = _Compare());`
- 功能:返回一个指向第一个大于等于给定值 `value` 的元素的迭代器,如果序列中不存在这样的元素,则返回 `last`(即序列结尾)。
- 示例:
```cpp
std::vector<int> vec = {1, 3, 4, 6, 8};
auto it = std::lower_bound(vec.begin(), vec.end(), 5); // it 现在指向值为 5 或者更大的元素的开始位置
```
2. **upper_bound**:
- 函数原型:`template <class _RandomAccessIterator, class _Tp, class _Compare = less<_Tp>> _RandomAccessIterator upper_bound(_RandomAccessIterator first, _RandomAccessIterator last, const _Tp& value, _Compare comp = _Compare());`
- 功能:返回一个指向第一个大于给定值 `value` 的元素的迭代器,如果序列中不存在这样的元素,则返回 `last + 1`(即序列结束后的下一个位置)。
- 示例:
```cpp
std::vector<int> vec = {1, 3, 4, 6, 8};
auto it = std::upper_bound(vec.begin(), vec.end(), 5); // it 现在指向值为 6 或者更大的元素的开始位置
```
C++中lower_bound和upper_bound的用法
在C++中,`lower_bound`和`upper_bound是两个用于查找有序容器中元素位置的函数。
1. `lower_bound`函数用于查第一个大于或等于给定值的元素的位置。它接受两个参数:容器的起始迭代器和要查找的值。返回值是一个迭代器,指向第一个大于或等于给定值的元素位置。如果容器中不存在大于或等于给定值的元素,则返回指向容器末尾的迭代器。
2. `upper_bound`函数用于查找第一个大于给定值的元素的位置。它接受两个参数:容器的起始迭代器和要查找的值。返回值是一个迭代器,指向第一个大于给定值的元素位置。如果容器中不存在大于给定值的元素,则返回指向容器末尾的迭代器。
这两个函数通常用于有序容器(如vector、set、map)中进行二分查找。它们的时间复杂度为O(log n),其中n是容器中元素的个数。
阅读全文