簡體   English   中英

下界給出其他結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM