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<

Hàm Template

• Cú pháp:

ắ đầ

ĩ

▫T t c  các hàm template  nh ngh a b t

ớ u v i

đị template theo sau m t danh sách các

ứ ớ

ấ ả ừ 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

ố ▫ M i tham s  hình th c ph i  class nh :ư

ỗ ừ t  khóa

template 

ho c ặ template 

L p Template

• L p template c ng mang ý t

ũ ớ ưở ư ng nh  hàm

tempale.

• Ví d :  nh ngh a m t l p template stack.

ụ Đị ộ ớ ĩ

L p Template

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

ớ L p Template ứ ủ ớ ươ ng th c c a l p template

template

int Stack::Push(const T &Item)

{

if (!IsFull())

{

StackPtr[++Top] = Item;

return 1;

}

return 0;

}

L p Template

• Hàm main

Stack FloatStack(5);

float F = 1.1;

cout << "Pushing elements onto FloatStack"

<< endl;

FloatStack.Push(F))

L p Template

• 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à

template 

▫Ví d :ụ

template

int Stack::Push(const T &Item)

{

…………….

}

STL

ộ ộ ư • 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ử

Thành ph n trong STL

ữ ữ ệ

ộ ư

• 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.

Thành ph n trong STL  ố ượ

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)