【问题标题】:Binary Search by passing sub iterators通过传递子迭代器进行二分搜索
【发布时间】:2017-01-11 03:49:57
【问题描述】:

我正在尝试实现一种使用 vector::iterators 的二进制搜索方法,因为它是递归调用的主要驱动程序。

到目前为止,我有:

template<typename T, typename iter> 
vector<int>::iterator binary_search(iter low, iter high, T key) {
    if (high < low) return -1;

    iter median = distance(low, high) / 2;

    if (*median == key) 
        return median;

    else if (*median > key) 
        return binary_search(low, median - 1, key);

    return binary_search(median + 1 , high, key);
}

但我收到编译器错误:

  • 'binary_search':对重载函数的模糊调用
  • 多个重载函数“binary_search”实例与参数列表匹配

随叫随到

vector<int> nums = { 0,1,2,3,4,5,6,7,8,9 };
binary_search(nums.begin(), nums.end(), 1);

除此之外,如果您碰巧发现了其他问题,请告诉我!提前致谢。

【问题讨论】:

  • 你知道std::命名空间中有一个std::binary_search算法函数吗?因此,也许您不需要编写自己的二进制搜索,因为它已经存在。如果不是这样,你还有std::lower_bound
  • 另外,请发帖minimal reproducible example。这样,其他人可以重现编译器错误,并为您提供错误的确切原因。我的信念是您拥有using namespace std;,编译器同时看到std::binary_search 和您的binary_search 版本,因此出现错误。
  • 是的,我明白了。我写这个是为了我自己的练习。 @paul,会做的
  • 我的建议是不要将您的函数命名为与标准函数相同的名称。此外,如果您访问我发布的链接,您应该会看到使用真实代码的此类功能的实现。然后将您正在做的事情与实现显示的内容进行比较。
  • 可能值得一看(使用命名空间标准)stackoverflow.com/questions/1452721/…

标签: c++ search vector binary iterator


【解决方案1】:

正如@PaulMcKenzie 建议的那样,发生错误是因为我在 std 命名空间下编写,以及包含 std::binary_search 的算法头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多