问题出在评论中。使用迭代器进行二进制搜索
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> ivec = {15,17,19,25,45,78,98};
auto beg = ivec.begin() , end = ivec.end();
auto mid = beg + (end-beg)/2;
int sought;
cin>>sought;
while(mid != end && *mid !=sought) //why not "mid != beg"?
{
if(*mid>sought)
end = mid;
if(*mid<sought)
beg = mid + 1;
mid = beg + (end-beg)/2;
}
if(*mid == sought)
cout<<"Found";
else
cout<<"Not Found";
}
根据C++ Primer 5th Edition,在这一段时间结束时,mid将等于end,否则它将表示我们正在查找的元素。如果mid等于end,那么元素不在文本中。
我用end
替换beg
后运行程序,它运行得很好。
如果我发布一个更好的实现作为一个答案,它是脱离主题吗?这段代码有许多功能,使我能够(我意识到代码来自一本书)。 –
这是这本书的代码吗?这对我来说似乎不正确 - 它会导致UB。 – Slava
@NirFridman如果你这样做会很有帮助。 –