STL自定義排序函式 需要注意的問題

2021-07-05 08:11:54 字數 1058 閱讀 4405

1.例子

先舉個例子:分析一下程式的執行結果:看看在三種情況下程式的輸出分別是什麼,有可能出現異常

#pragma once

#include 

#include 

//////下面是三個自定義的謂詞函式,排序演算法將分別使用這三個函式

//bool compare(int a,int b)

bool compare1(int a,int b)

bool compare2(int a,int b)

////main函式

int main(int arg,char * argv)

//2.結果

三種情況在程式中分別使用後(這裡為了節省空間寫在了一起)的結果是:

(1)第一種情況(

compare函式

)和第三種情況(

compare2函式

)出現錯誤(assert):

(2)第二種情況(compare1函式)下程式執行正常,結果正確。

3.分析

第一種情況

和第三種情況出錯的原因是:

跟蹤到出現異常的stl的源**的乙個函式中,就是下面這個函式:

template inline

bool __clrcall_or_cdecl _debug_lt_pred(_pr _pred, _ty1& _left, _ty2& _right,

const wchar_t *_where, unsigned int _line)

這個函式要求對於呼叫的兩個引數交換位置時不能得到相同的true的結果。也就是為什麼第一種和第三種不行的原因了:a當待比較的兩個值相等的時候,

第三種情況和b當

待比較的兩個值不相等的時候,

第一種情況。

但是對於呼叫的兩個引數交換位置時允許得到相同的false的結果,因為這時根本不進行

兩個引數交換位置操作!!(具體看程式:在第乙個if的時候就返回false了)

在自定義比較函式中如果是相等的情況 返回false就ok了

自定義 LayoutManger需要注意的幾個地方

最近寫銷控表,需要有上萬個資料 的情況,首先感謝 的帖主,給了大家乙個非常好的例子。本文也是根據他的帖子的原理,整理了自己在編寫銷控表的時候遇到的問題。很多demo 在onlayoutchildren 方法中 進行兩個動作,乙個是計算得到真實的最大寬高,乙個是進行layout的動作,我的觀點,一旦外...

Python自定義函式需要注意的問題

python自定義函式需要注意的問題 1.縮排。乙個語句塊要用相同的縮排,兩個縮排相同的邏輯行可以看做可以並列的關係,不可能是所屬關係。return需要跟for對齊,否則 2.遍歷。range n 代表的是從0開始,遍歷到n 1,步長為1 range 1,n 1 代表從1開始,遍歷到n 步長為1 r...

自定義Cell需要注意的問題

使用xib建立cell時需要在設定單元格樣式時使用 nsbundel mainbundel loadnibname xib的檔名 owner self option nil 0 來初始化單元格 而使用純手寫 時,需要使用init方法來初始化cell上的控制項,來避免單元格重影問題,而xib不會出現重...