【发布时间】: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