📜  使用C ++ STL查找排序后的数组的底面和天花板(1)

📅  最后修改于: 2023-12-03 14:49:48.002000             🧑  作者: Mango

使用C++ STL查找排序后的数组的底面和天花板

当我们需要在一个排序后的数组中查找某些元素的位置时,C++ STL提供了许多常用的函数来简化我们的代码。其中,我们可以使用lower_bound和upper_bound函数来查找数组的底部和顶部。

lower_bound函数

lower_bound函数用于查找第一个大于等于某个值的元素的迭代器。在一个有序序列中,可以用lower_bound函数快速地找到第一个大于等于某个值的元素的位置。

以下是lower_bound函数的语法:

auto lower_bound (ForwardIt first, ForwardIt last, const T& value);

其中,first和last是迭代器范围,指向查找序列的开头和结尾。value是要查找的值。

下面是一个使用lower_bound函数查找数组底部的例子:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    vector<int> arr{1, 2, 3, 4, 5};
    auto it = lower_bound(arr.begin(), arr.end(), 3);
    if (it != arr.end()) {
        cout << "底部元素的位置是: " << it - arr.begin() << endl;
    }
    return 0;
}

输出结果:底部元素的位置是: 2

upper_bound函数

upper_bound函数用于查找第一个大于某个值的元素的迭代器。在一个有序序列中,可以用upper_bound函数快速地找到第一个大于某个值的元素的位置。

以下是upper_bound函数的语法:

auto upper_bound (ForwardIt first, ForwardIt last, const T& value);

其中,first和last是迭代器范围,指向查找序列的开头和结尾。value是要查找的值。

下面是一个使用upper_bound函数查找数组顶部的例子:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    vector<int> arr{1, 2, 3, 4, 5};
    auto it = upper_bound(arr.begin(), arr.end(), 3);
    if (it != arr.end()) {
        cout << "顶部元素的位置是: " << it - arr.begin() << endl;
    }
    return 0;
}

输出结果:顶部元素的位置是: 3

注意,当要查找的值不存在于序列中时,lower_bound和upper_bound函数返回的都是查找值应该插入的位置的迭代器,而非NULL指针。

上述程序均使用了vector容器,不仅仅是为了方便操作,也可以通过使用vector容器的方法来验证查找结果是否正确。

以上就是使用C++ STL查找排序后的数组的底面和天花板的介绍。