ớ
Bài 10: Hàm và l p Template
Hàm Template
• Xét ví d sau:
ụ
ế ủ ế
int MyAbs(int X)
{
return X>=0?X:X;
}
long MyAbs(long X)
{
return X>=0?X:X;
}
double MyAbs(double X)
{
return X>=0?X:X;
}
ữ ệ ị ớ ứ ộ ố ệ đố ấ i c a m t s . Ta vi t Vi t hàm l y tr tuy t ể ề ề nhi u hàm ng v i nhi u ki u d li u khác nhau.
Hàm Template
ứ ề ề ớ ữ • Thay vì vi t nhi u hàm ng v i nhi u ki u d
ệ ổ
template
T MyAbs(T x)
{
return (x>=0)?x:x;
}
ế ẽ ế ư ể ộ li u. Ta s vi t m t hàm t ng quát dùng Template nh sau:
ọ
G i hàm:
cout< cout< • Cú pháp: ắ đầ ĩ ▫T t c các hàm template nh ngh a b t ớ
u v i ộ ứ ớ ặ ấ ả
ừ
t khóa
ố
tham s hình th c v i hàm template vây quanh
trong các ngo c nh n ( ọ < và >) ứ ả đượ đặ ướ c t tr ở
c b i ỗ
ừ
t khóa template ho c ặ template • L p template c ng mang ý t ũ ớ ưở ư
ng nh hàm tempale. • Ví d : nh ngh a m t l p template stack. ụ Đị ộ ớ ĩ template class Stack { ướ int Size; //Kích th c stack int Top; T *StackPtr; private: ~Stack() { delete [] StackPtr; } int Push(const T&); int Pop(T&); public: }; • Đị ĩ nh ngh a ph template int Stack { if (!IsFull()) { StackPtr[++Top] = Item; return 1; } return 0; } • Hàm main … Stack float F = 1.1; cout << "Pushing elements onto FloatStack" << endl; FloatStack.Push(F)) … • Chú ý: ớ ĩ ▫Hàm thành viên nh ngh a bên ngoài l p
ớ ầ đầ ắ đầ đị
u v i ph n template b t u là ▫Ví d :ụ template int Stack { ……………. } ộ ộ ư
• STL (Standard Template Library) là m t b th ữ ụ ủ ệ vi n vô cùng h u d ng c a C++. ệ ớ • Dùng
ế để
ư ă ủ ế
ắ ớ
ế ế ấ ổ
ữ ệ
ấ
làm vi c v i các c u trúc d li u ph
ế
đợ
i, ng n x p và các
bi n nh danh sách, hàng
ữ ệ
ấ
phép toán ch y u v i các c u trúc d li u này
ư
nh tìm ki m, s p x p, truy xu t, thêm, xóa,
s aử ữ ữ ệ ộ ư • Các container (các b l u tr d li u): ổ ế đ ấ ▫ là các c u trúc d li u ph bi n ã template hóa dùng để ư ữ ệ ữ ữ ệ
ể l u tr các ki u d li u khác nhau ạ ồ ▫ G m hai lo i: ữ ữ ệ ầ ự ộ ư ồ sequential container (các b l u tr d li u tu n t ) bao g m list, vector và deque ữ ữ ệ ế ộ ư
associative container (các b l u tr d li u liên k t) bao ồ
g m map, multimap, set và multiset. • ỏ ể ỏ ế ỏ ữ ệ
ộ ư ầ ử iterator (các con tr d li u) là các con tr đ tr đ n các
ph n t ữ
trong các b l u tr . ữ ữ ệ • Các algorithm (các thu t toán l u tr d li u) là các hàm ữ ư ử ể ậ
ệ ớ
ắ ổ ế
ấ ế ế ư
ộ ư
ph bi n đ làm vi c v i các b l u tr nh thêm, xóa, s a,
truy xu t, tìm ki m, s p x p. ng hàm) là các hàm và phép • Các function object (các đ i t
ệ ớ ổ ế
ư ầ ử ượ ư
đ
ư ữ
c l u tr
ữ ư ộ ể
ộ ư ậ ừ toán ph bi n đ làm vi c v i các ph n t
ữ
cũng nh các b l u tr và các thu t toán l u tr nh c ng,
tr , nhân, chia, so sánh. ộ ươ • Các adapter (các b t ạ
ng thích) Các adapter chia làm 3 lo i ộ ươ ư ữ ồ ng thích l u tr ) bao g m stack, ▫ container adapter (các b t
queue và priority_queue ộ ươ ▫ iterator adapter (các b t ỏ
ng thích con tr ) ộ ươ ▫ function adapter (các b t ng thích hàm)Hàm Template
đị
template theo sau m t danh sách các
ố
▫ M i tham s hình th c ph i
class nh :ư
ớ
L p Template
ớ
L p Template
ớ
L p Template
ứ ủ ớ
ươ
ng th c c a l p template
ớ
L p Template
ớ
L p Template
template
STL
ầ
Thành ph n trong STL
ầ
Thành ph n trong STL
ố ượ