lower_bound和upper_bound,举例说明
时间: 2023-10-14 19:21:23 浏览: 76
lower_bound和upper_bound是C++ STL中的两个函数,都用于查找一个有序序列中特定值的位置。
lower_bound函数返回指向第一个不小于给定值的元素的迭代器,也就是说,如果该值存在于序列中,返回指向它的迭代器;如果不存在,返回指向第一个大于它的元素的迭代器。
upper_bound函数返回指向第一个大于给定值的元素的迭代器,也就是说,如果该值存在于序列中,返回指向它后面一个元素的迭代器;如果不存在,返回指向第一个大于它的元素的迭代器。
举个例子,假设有一个有序序列:{1, 2, 3, 4, 4, 4, 5, 6}。
1. 使用lower_bound函数查找元素4的位置:
```c++
vector<int> v{1, 2, 3, 4, 4, 4, 5, 6};
auto it = lower_bound(v.begin(), v.end(), 4);
if (it != v.end() && *it == 4) {
cout << "4 found at position: " << it - v.begin() << endl;
} else {
cout << "4 not found" << endl;
}
```
输出结果:4 found at position: 3
2. 使用upper_bound函数查找元素4的位置:
```c++
vector<int> v{1, 2, 3, 4, 4, 4, 5, 6};
auto it = upper_bound(v.begin(), v.end(), 4);
if (it != v.end()) {
cout << "First element greater than 4 found at position: " << it - v.begin() << endl;
} else {
cout << "4 is the largest element in the sequence" << endl;
}
```
输出结果:First element greater than 4 found at position: 6
注意,当序列中不存在要查找的元素时,lower_bound和upper_bound返回的迭代器都指向第一个大于它的元素的位置。
阅读全文