[英]Lower_bound gives other result
在 C++ 中測試 lower_bound 函數 在 Ideone 中運行此代碼后,我得到了奇怪的結果。 我究竟做錯了什么? 自動使用在這里正確嗎?
代碼 :
vector<int> a(5);
a.clear();
rep(i,0,5){
a[i]=i+1;
cout<<a[i]<<' ';
}
cout<<endl;
auto pos = lower_bound(a.begin(),a.end(),3);
cout<< (pos-a.begin())<<'\n';
輸出 :
1 2 3 4 5
0
為什么?? 預期輸出:
2
我做錯了什么我不明白。 看起來像基本的 C++ 代碼
這一行創建了一個包含五個元素的向量:
vector<int> a(5);
下一行刪除所有五個元素,將大小設置為零:
a.clear();
因此,循環寫入超出向量的end()
,觸發未定義的行為。 這不會擴展向量。
在實踐中,你在一個空序列上調用lower_bound
,所以pos == a.begin()
。 刪除對clear()
的調用以解決問題。
您的代碼具有未定義的行為。
您正在創建一個std::vector
其中包含 5 個int
,然后您clear()
將其大小設置回 0的 vector 。
然后運行一個循環,訪問超出向量大小范圍的向量元素。 此時,您的代碼具有未定義的行為。 什么事情都可能發生。 您的代碼可能會崩潰。 您的代碼可能會損壞內存。
然后你在一個空向量上調用std::lower_bound()
,所以它返回end
迭代器,它與begin
迭代器相同,所以它們之間的距離是 0,這就是你打印出來的。
您只需要擺脫對clear()
的調用,然后您的代碼就會按您的預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.