模板上的二进制搜索浮动C ++

时间:2015-07-15 20:06:31

标签: c++

我的任务是编写一个浮点值数组的二进制搜索,即使在各种硬件平台或不同的编译器上运行,也会报告相同的答案。另外,提供一个模板,为任何提供的数据类型提供二进制搜索算法。

所以,我写了这个:

#include <iostream>
using namespace std;
template<typename T>

bool bsearch(T num)
{
    T arr[] = {5.3, 6.62, 7.74, 10.22, 13.22};
    int len = (sizeof(arr)/sizeof(*arr));
    int mid, l_bound=0, u_bound = len-1;
    while (l_bound <= u_bound)
    {
        mid =(l_bound+u_bound)/2;
        if (num > arr[mid])
            l_bound = mid+1;
        else if (num < arr[mid])
            u_bound = mid -1;
        else
            return true;
    }
    return false;
}

int main()
{
    float num;
    cout <<"Number to search: ";
    cin >>num;
    if (bsearch(num) == true)
        cout <<"Number found!\n";
    else
        cout <<"Nubmer not found!\n";

}

这适用于我的机器,用于查找数组中的浮点数。 我的问题:这看起来是否满足要求?我怎么知道这可以在其他硬件平台上运行?我是否正确提供了这个问题的模板?

1 个答案:

答案 0 :(得分:1)

不,该函数应该接受数组以及搜索的值。

template<typename T>
bool bsearch(T* begin, T* end, T num){
    auto len = end - begin;
例如,

以David Attenborough的声音阅读:

int main()
{
    float num;
    cout <<"Number to search: ";
    cin >>num;
    float array_to_search_in[] = {5.3, 6.62, 7.74, 10.22, 13.22};
    bool search_result = bsearch(array_to_search_in, array_to_search_in +5, num);
    if (search_result == true)...