📜  C++中的std :: bsearch(1)

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

C++中的std::bsearch

在C++语言中,有许多标准库函数可用来帮助程序员实现一些常用算法。其中一个函数是std::bsearch,该函数用于在已排序的数组中搜索特定元素。

函数原型
void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar)(const void *, const void *));

其中,

  • key:指向要搜索的元素的指针。
  • base:指向要搜索的数组的起始指针。
  • num:搜索的数组元素的数量。
  • size:每个元素的大小(以字节为单位)。
  • compar:用于比较两个元素的函数指针。
函数功能

std::bsearch函数实现了一个二分查找算法,将指定的key与排序的数组中的元素进行比较。 如果查找成功,则返回指向该元素的指针;如果未找到,则返回NULL指针。

函数使用

下面是一个简单的示例,展示了如何使用std::bsearch函数来查找一个整数是否存在于一个已排序的整数数组中。

#include <iostream>
#include <cstdlib>
#include <cstring>

int compare(const void *a, const void *b) {
    return (*(int*)a - *(int*)b);
}

int main() {
    int arr[] = {2, 5, 7, 9, 11, 13, 15};
    int key = 5;
    int* item = (int*) std::bsearch(&key, arr, 7, sizeof(int), compare);
    if(item != NULL) {
        std::cout << "Element found: " << *item << std::endl;
    } else {
        std::cout << "Element not found" << std::endl;
    }
    return 0;
}

在此示例中,我们声明了一个名为arr的整数数组,并指定了要查找的键key。然后,我们创建了一个指向int型的指针item来接收返回值。compare函数用于比较bsearch所查找的元素和数组中的每个元素。 在调用bsearch函数时,我们将key传递给key参数,arr传递给base参数,7(数组元素数量)传递给num参数,sizeof(int)传递给size参数,compare函数的地址传递给compar参数。 如果函数成功找到元素,则会将指向找到元素的指针赋值给item;否则,该指针将保持为NULL。 最后,我们根据在item中返回的值输出结果。

注意事项
  • 已排序的数组是使用std::sortstd::qsort等排序算法进行排序的。
  • 搜索的数组必须是连续内存空间,例如静态数组或堆中数组,而不能是链式存储结构。
  • 搜索的元素类型必须是可比较的,例如基本类型或具有自定义比较函数的自定义类型。
总结

std::bsearch函数是一个非常有用的标准库函数,用于在已排序的数组中搜索特定元素。 通过将搜索算法封装在函数中,程序员不必自己实现二分查找算法,从而节省了时间和代码量。 但是,程序员需要注意一些注意事项,并确保使用合适的搜索算法和正确的比较函数。