問題出在評論中。使用迭代器進行二進制搜索
#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如果你這樣做會很有幫助。 –