普通函式與函式模板的區別
普通函式呼叫時可以發生自動型別轉換(隱式型別轉換)
函式模板呼叫時,如果利用自動型別推導,不會發生隱式型別轉換
如果利用顯示指定型別的方式,可以發生隱式型別轉換
int
add1
(int a,
int b)
int a =10;
char c =
'a';
cout<<
add1
(a,c)
/會隱式把char型變數,轉化為int型
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 遞迴就是將大的問題...