📌  相关文章
📜  C ++中成对数组中lower_bound()和upper_bound()的实现(1)

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

C++中成对数组中lower_bound()和upper_bound()的实现

在C++中,我们可以使用STL中的lower_bound()和upper_bound()函数来查找成对数组中的元素,这两个函数都是二分查找算法的一种扩展。lower_bound()函数返回第一个等于或大于给定值的元素位置,而upper_bound()函数返回第一个大于给定值的元素位置。

以下是C++中成对数组中lower_bound()和upper_bound()的实现示例代码:

#include <iostream>
#include <algorithm>

using namespace std;

void display(int* first, int* last) {
    for(; first != last; ++first) {
        cout << *first << " ";
    }
    cout << endl;
}

int main() {
    int nums[] = {1, 3, 5, 7, 9, 11, 13};
    int len = sizeof(nums) / sizeof(nums[0]);

    // lower bound implementation
    int target = 6;
    int* lb = lower_bound(nums, nums + len, target);
    if(lb == nums + len) {
        cout << target << " not found!" << endl;
    } else {
        cout << target << " is found at index " << lb - nums << endl;
    }

    // upper bound implementation
    target = 6;
    int* ub = upper_bound(nums, nums + len, target);
    if(ub == nums + len) {
        cout << target << " not found!" << endl;
    } else {
        cout << target << " can be inserted at index " << ub - nums << endl;
    }

    return 0;
}

上述代码中,我们先定义了一个整数数组nums,然后计算数组的长度len。接着,我们实现了lower_bound()和upper_bound()函数。对于lower_bound()函数的实现,我们首先确定查找目标target,然后使用lower_bound()函数在数组nums中查找第一个大于或等于target的位置,如果查找结果处于数组末尾,则表示目标不存在;否则,返回目标所处的索引。对于upper_bound()函数的实现,我们同样确定查找目标target,然后使用upper_bound()函数在数组nums中查找第一个大于target的位置,如果查找结果处于数组末尾,则表示目标可以插入到数组末尾;否则,返回目标可以插入到的索引。

最后,我们编写了一个display()函数,用于打印数组元素,以及对lower_bound()和upper_bound()函数进行测试。我们可以在终端中运行上述代码,得到以下输出:

6 is found at index 3
6 can be inserted at index 3

即,目标6可以插入到数组nums的索引3处,而相应的lower_bound()函数返回的是目标所处的索引,为3