=引發的錯誤

問題

#include <iostream>
using namespace std;

bool Gt(const int &a, const int &b) 
{
    return a >= b; 
}

int num[100];
int main()
{
    num[0] = 100;
    num[1] = 100;
    num[3] = 10;

    sort(num, num+3, Gt);
    for (int i = 0; i < 3; i ++)
        cout << num[i] << endl;
    return 0;
}

問:上面程序輸出什麼?

答:100 100 10 ?

錯!輸出不確定。


分析:

比較函數有個坑,不滿足嚴格弱關係序(strict weak ordering)。

參見C++參考手冊:sort的約束二。

嚴格弱關係序參見wiki


總結:

大坑小坑都是坑,坑坑害人。

發佈了18 篇原創文章 · 獲贊 0 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章