c 學習筆記 16

2021-10-05 20:42:44 字數 2107 閱讀 7451

普通函式與函式模板的區別

普通函式呼叫時可以發生自動型別轉換(隱式型別轉換)

函式模板呼叫時,如果利用自動型別推導,不會發生隱式型別轉換

如果利用顯示指定型別的方式,可以發生隱式型別轉換

int

add1

(int a,

int b)

int a =10;

char c =

'a';

cout<<

add1

(a,c)

template

<

class

t>

t add2

(t a,t b)

cout<<

add2

(a,c)

myadd2<

int>

(a,c)

;//已經確定了t的型別,所以可以自動隱式轉換

普通函式和函式模板的呼叫規則

1.如果函式模板和普通函式都可以實現,優先呼叫普通函式

2.可以通過空模板引數列表來強制呼叫函式模板

3.函式模板也可以發生過載

4.如果函式模板可以產生更好的匹配,優先呼叫函式模板

void

myprint

(int a,

int b)

template

<

class

t>

void

myprint

(t a,t b)

template

<

class

t>

void

myprint

(t a,t b,t c)

int a =10;

int b =10;

myprint(a,b);

//優先呼叫普通函式

myprint<

>

(a,b)

;//加入空引數列表,強制呼叫模板

myprint

(a,b,

100)

;char c1 =

'a';

char c2 =

'b';

myprint

(c1,c2)

;//普通函式和模板都可以呼叫,但是運用模板是不需要強轉,更好的匹配,所以呼叫模板

模板的侷限性

模板的通用性並不是萬能的,對於特定的資料型別,需要用具體化的方式實現

template

<

class

t>

bool

mycompare

(t &a,t &b)

else

}//利用具體化的person型別實現,具體化會被優先呼叫

template

<

>

bool

mycompare

(person &p1,person &p2)

//表明這是乙個函式模板的過載,具體化為person型別

else

}class

person

string m_name;

int m_age;

}person p1

("tom",10

);person p2

("tom",10

);mycompare

(p1,p2)

;

類模板

作用:建立乙個通用類,類中的成員資料型別可以不具體制定,用乙個虛擬的型別來代表

語法:template

template

<

class

nametype

,class

agetape

>

//可以構造兩種待定的資料型別

class

person

nametype m_name;

agetype m_age;};

personint>p1(

"li",19

);

c 學習筆記 16 遞迴

遞迴 能夠解決那些難以用簡單迴圈解決的問題 例如 八皇后問題,階乘 遞迴函式 呼叫自身的函式 1.階乘 0 1 1!1 n n n 1 n 1 n 1 n 2 假設函式factorial n 為求n 如果呼叫到n 0的情況,函式直接返回結果,函式知道如何求解最簡單的情形,稱之為基本情況或者 停止條件...

學習筆記16

提出該動機的原因有3個方面 1 檢測演算法是專門在複雜場景中精確定位和區分物件的,這可能導致更準確和穩健的 2 重用檢測模型可以減少跟蹤中的重複工作,因此我們可以將更多精力放在跟蹤特定的問題上,例如目標域適應和時間依賴性。3 這種框架有可能促成多任務模型,即聯合檢測和跟蹤視覺物體,這接近行業的需求。...

Python學習筆記 16

自己總結的 遞迴就是將大的問題分解為相同的小問題,方法內重複呼叫自己 求10的階乘 10 deffactorial n for迴圈方法 result n for i in range 1 n result i return result n 4 print factorial n 遞迴就是將大的問題...