C++标准库中的lower_bound函数 是二分查找??
时间: 2024-02-16 22:58:51 浏览: 216
是的,C++标准库中的lower_bound函数是用于进行二分查找的函数之一。它用于在有序的容器(如数组、向量、集合等)中查找第一个大于或等于给定值的元素的位置,并返回一个迭代器指向该位置。
lower_bound函数的使用方式如下:
```cpp
#include <algorithm>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用lower_bound查找第一个大于等于3的元素的位置
auto it = std::lower_bound(vec.begin(), vec.end(), 3);
// 输出结果
if (it != vec.end()) {
std::cout << "找到了,位置为:" << std::distance(vec.begin(), it) << std::endl;
} else {
std::cout << "未找到" << std::endl;
}
return 0;
}
```
在上述代码中,lower_bound函数会返回一个迭代器,指向第一个大于等于给定值的元素的位置。如果找到了该元素,则输出其位置;如果未找到,则输出未找到的提示。
相关问题
如何实现lower_bound和upper_bound函数?
lower_bound和upper_bound是C++标准库中的两个函数,用于在有容器(如数组、向量、集合等)中查找特定值的位置1. lower_bound函数:
lower_bound函数用于查找第一个大于或等于给定值的元素的位置。它的实现方式如下:
- 首先,确定查找范围的起始位置和结束位置,通常是容器的begin()和end()迭代器。
- 然后,使用二分查找算法,在查找范围内不断缩小查找区间,直到找到第一个大于或等于给定值的元素。
- 最后,返回该元素的位置。
2. upper_bound函数:
upper_bound函数用于查找第一个大于给定值的元素的位置。它的实现方式与lower_bound函数类似,只是在找到第一个大于给定值的元素后停止查找。
下面是一个示例代码,演示了如何实现lower_bound和upper_bound函数:
```cpp
template <typename ForwardIterator, typename T>
ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, const T& value) {
while (first != last) {
ForwardIterator mid = first + std::distance(first, last) / 2;
if (*mid < value) {
first = mid + 1;
} else {
last = mid;
}
}
return first;
}
template <typename ForwardIterator, typename T>
ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, const T& value) {
while (first != last) {
ForwardIterator mid = first + std::distance(first, last) / 2;
if (value < *mid) {
last = mid;
} else {
first = mid + 1;
}
}
return first;
}
```
C++ algorithm::lower_bound函数
C++的algorithm库中的lower_bound函数用于在有序序列中查第一个不小于给定值的元素的位置。它的原型为:iterator lower_bound (const value_type& val) const; [1]
lower_bound函数返回的是一个迭代器,指向序列中第一个不小于给定值的元素,如果找不到这样的元素,则返回指向序列末尾的迭代器。
下面是lower_bound函数的使用示例:
```cpp
int a = {0, 1, 3, 5, 8, 10, 16};
int* result = lower_bound(a, a + 7, 3);
```
在上面的示例中,lower_bound函数会返回一个指向序列a中第一个不小于3的元素的指针,即指向数字3的位置。
需要注意的是,lower_bound函数要求序列必须是有序的,否则结果将是不确定的。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [C++:lower_bound 和 upper_bound](https://blog.csdn.net/weixin_43414130/article/details/104719988)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [使用std::lower_bound和std::upper_bound解决常见的二分查找问题](https://blog.csdn.net/anakin7/article/details/71055747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [lower_bound()/upper_bound()函数(C++)](https://blog.csdn.net/weixin_51566349/article/details/128086465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20250102104920.png)
![-](https://img-home.csdnimg.cn/images/20250102104920.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)