0
私はベクトル::イテレータを使用するバイナリ検索の方法を実装しようとしています。これは再帰呼び出しの主なドライバです。サブイテレータを渡すことによるバイナリ検索
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 :: binary_search](http://en.cppreference.com/w/cpp/algorithm/binary_search)アルゴリズム関数が 'std ::'名前空間にあることに気が付きますか?だから、既に存在するので、あなた自身のバイナリ検索を書く必要はありません。そうでなければ、[std :: lower_bound](http://en.cppreference.com/w/cpp/algorithm/lower_bound)もあります。 – PaulMcKenzie
また、[mcve]を投稿してください。このようにして、他の人はコンパイラエラーを再現し、エラーがある正確な理由を知ることができます。私の考えは、あなたが 'using namespace std;'を持っていることです。コンパイラは'std :: binary_search'とあなたのバージョンの 'binary_search'の両方を見るので、エラーです。 – PaulMcKenzie
ええ、私はそれを理解しています。私は自分の練習のためにこれを書いています。 @ paul、do will – blueman