list的排序和比較函式作為引數傳遞

2022-01-28 20:29:25 字數 1202 閱讀 3432

前幾天使用list的排序功能,出現了一點問題,來總結一下。

定義乙個簡單的節點類,包含乙個字串和乙個整數,並過載了小於操作,根據整數的大小進行比較。

class

node

void

print()

friend

bool

operator

< (const node& n1,const node&n2)

public

:

intid;

string

name;

};

然後建立了乙個測試的結構,

把一些node節點的位址放入list中,我一般是這樣用的,因為有時候在乙個地方用建立了這些節點,在另外的一些地方要用這些節點,

如果建立的時候不使用new的話,把他們存入list之後,在其他地方就不能再使用,所以就只能用new建立了,然後把指標放入list。

**如下,

class

nodelist

void

print()

}void

test()

public

: list

nodes;

};

在使用list sort的時候,可以使用預設引數,也可以傳遞乙個比較函式,所以又定義了乙個node的比較函式,放在struct裡面,

struct

cmp_node

};

最後進行測試,呼叫nodelist的test函式就可以了。期望後兩次的結果都是排好序的?但結果確實只有最後的乙個是排好序的,也就是第一次沒有傳遞比較函式作為引數的sort沒有對list排序。這個不知道是什麼原因。

來說一下為什麼要把新定義的比較函式放在乙個結構體裡面。

在c/c++裡面,函式不是物件,不能作為引數來傳遞,所以把要傳遞的函式放在乙個物件裡面,這裡是放在乙個struct裡面,按理說放在乙個class裡面作為public函式也是可以的,沒有進行測試過,記得使用unordered_map傳遞hash函式的時候,也是類似的情況,當時使用的後一種方法。

需要注意的是,在結構體裡面定義比較函式的時候,不再是過載小於號,而是一對小括號,然後引數應該是放在list裡面的資料型別,是節點指標。

總覺得把指標放在list裡面好像很彆扭的,希望大家能指導下這種情況下的list的用法。

指標作為函式引數傳參的問題

在大一的時候就遇到的乙個當時一直懂得不太透徹的問題 使用函式來交換兩個變數的值.現在常常用到algorithm標頭檔案裡的swap函式,因此決定整理一下這個問題.希望能對後來者有所幫助.首先,要知道的乙個結論是函式引數的傳遞是單向的,也就是實參 形參,無法完成形參 實參的引數傳遞.因此,像下面這種寫...

形參和實參的比較

1 形參出現在函式定義中,在整個函式體內部都可以使用,離開該函式則不能使用。實參出現在主調函式中,主調函式中呼叫乙個函式時,函式名後面括號中的引數稱為實參。2 函式呼叫中發生的資料傳送是單向的,只能把實參的值傳送給形參,但改變形參的值並不可以改變實參的值。3 如果在呼叫函式的過程中傳給函式的不是指標...

ArrayList的使用和List的比較

使用非泛型集合類的限制可以通過編寫一小段程式來演示,該程式利用 net framework 基類庫中的 arraylist 集合類。arraylist是乙個使用起來非常方便的集合類,無需進行修改即可用來儲存任何引用或值型別。the net framework 1.1 way to create a ...