TỔNG QUAN VỀ THƯ VIỆN CHUẨN STL

Embed Size (px)

DESCRIPTION

TỔNG QUAN VỀ THƯ VIỆN CHUẨN STL

Citation preview

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    1/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y )

    TNG QUAN VTH VIN CHUN STL

    I. GII THIU TH VIN CHUN STL

    C++ c nh gi l ngn ngmnh v tnh mm do, gn gi vi ngn ngmy. Ngoi ra, vi khnng lp ttheo mu ( template ), C++ khin ngn nglp trnh trthnh khi qut, khng cthv chi tit nh nhiu nngkhc. Sc mnh ca C++ n tSTL, vit tt ca Standard Template Library - mt th vin template cho Cvi nhng cu trc dliu cng nh gii thut c xy dng tng qut m vn tn dng c hiu nng v tcca C. Vi khi nim template, nhng ngi lp trnh ra khi nim lp trnh khi lc (generic programmiC++ c cung cp km vi bth vin chun STL.

    STL gm cc thnh phn chnh:

    Container (cc b lu tr d liu) l cc cu trc d liu ph bin template ha dng lu tr cc kd liu khc nhau. Cc container chia lm 2 loi:o Sequential container (cc ctdl tun t) bao gm list, vector v dequeo Asociative container (cc ctdl lin kt) bao gm map, multimap, set v multiset

    Iterator (bin lp) ging nh con tr, tch hp bn trong container Algorithm (cc thut ton ) l cc hm ph bin lm vic vi cc b lu tr nh thm, xa, sa, truy x

    tm kim, sp xp ... Function object (functor): Mt kiu i tng c th gi nh 1 hm, ng ra y l 1 k thut nhng tro

    STL n c nng cao v kt hpvi cc algorithm Cc adapter (b tng thch) , chia lm 3 loi:

    o container adapter (cc b tng thch lu tr) bao gm stack, queue v priority_queueo iterator adapter (cc b tng thch con tr)o function adapter (cc b tng thch hm)

    Nhng thnh phn ny lm vic chung vi cc thnh phn khc cung cp cc gii php cho cc vn khc ncachng trnh.

    B th vin ny thc hin ton b cc cng vic vo ra d liu (iostream), qun l mng (vector), thc hin hu hcc tnh nng ca cc cu trc d liu c bn (stack, queue, map, set...). Ngo i ra, STL cn bao gm cc thut toc bn: tm min, max, tnh tng, sp xp (vi nhiu thut ton khc nhau), thay th cc phn t, tm kim (tm kimthng v tm kim nh phn), trn. Ton b cc tnh nng nu trn u c cung cp di dng template nn vlp trnh lun th hin tnh khi qut ha cao. Nh vy, STL lm cho ngn ng C++ tr nn trong sng hn nhiu.

    c im th vin STL l c h tr trn cc trnh bin dch c hai mi trng WINDOWS ln UNIX, v vy khi s dng th vin ny trong x l thun tin cho vic chia s m ngun vi cng ng pht trin.

    V th vin chun c thit k bi nhng chuyn gia hng u v c chng minh tnh hiu qu trong lchtn ti ca n, cc thnh phn ca th vin ny c khuyn co s dng thay v dng nhng phn vit tay ngoi hay nhng phng tin cp thp khc. Th d, dng std::vectorhay std::stringthay v dng kiu mng thun l mt cch hu hiu vit phn mm c an ton v linh hot hn.

    Cc chc nng ca th vin chun C++ c khai bo trong namespace std;

    Di y ta stm hiu tng thnh phn ca STL

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    2/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y )

    II. NHP XUT VI IOSTREAM

    Nhchng ta sthy, C++ sdng nhp/xut kiu an ton (type safe). Vic nhp/xut c thc hin mt cch tng theo li nhy cm vkiu dliu. Mi thao tc nhp xut c c nh ngha thch hp xl mt kiu dliu cthth hm c gi xl kiu dliu . Nu khng c i snh gia kiu ca dliu hin ti v m

    hm cho vic xl kiu dliu , mt chdn li bin dch c thit lp. V thdliu khng thch hp khng t"lch" qua hthng.

    Cc c tnh nhp xut m ttheo hng i tng. Ngi dng c thchnh nhp/xut ca cc kiu dliu tnh ngha cng nhcc kiu dliu chun. Khnngmrng ny l mt trong cc c tnh quan trng ca C++

    1.CC LP STREAM

    C++ sdng khi nim dng tin (stream) v a ra cc lp dng tin tchc vic nhp xut. Dng tin c thxem nh mt dy cc byte. Thao tc nhp l ly (c) cc byte tdng tin (khi gi l dng nhp - input) vobnh. Thao tc xut l a cc byte tbnhra dng tin (khi gi l dong xut - output). Cc thao tc nc lp thit b. thc hin vic nhp, xut ln mt thit bcth, chng ta chcn gn dng tin vi thit bn

    Khi nm stream:

    chui byte, kt thc bi k hiu end_of_file

    Input: tbn phm, a... vo bnh

    Output: tbnhra mn hnh, my in...

    file cng c coi l mt dngLp streambuf l c s cho tt c cc thao tc vo ra bng ton t,n nh ngha ccc trng c bn ca cvng m lu tr cc k t xut haynhp. Lp ios l lp dn xut t streambuf , ios nh ngha cc dng bn v khnng kim trali dng cho streambuf . ios l lp c s o cho cc lp istream v ostream. Mi lpny c nh ngha chng ton t > cho cc kiu d li u c skhc nhau.

    C 4lp quan trng cn nhl:+Lp c sios+Tlp ios dn xut n 2lp istream v ostream+Hai lp istream v ostream li dn xut ti lp iostreamS ktha gia cc lp nh sau:

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    3/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y )

    - Lp ios+Thuc tnh ca lp:Trong lp ios nh ngha cc thuc tnh c sdng lm cc cnh dng cho vinhp xut v cc ckim tra li (xem bn di).+Cc phng thc:Lp ios cung cp mt sphng thc phc vvic nh dng dliu nhp xut, kimtra li (xem bn di).

    - Lp istreamLp ny cung cp ton tnhp >>v nhiu phng thc nhp khc (xem bn di) nh cc phng thget, getline, read, ignore, peek, seekg, tellg,...

    - Lp ostreamLp ny cung cp ton txut V >chtin li khi dng nhp cc gi trs(nguyn, thc). nhp kv chui k tnn dng cc phng thc sau (nh ngha trong lp istream):

    istream::get();istream::getline();istream::ignore();

    3.1. Phng thc get

    C 3dng (thc cht c 3phng thc cng c tn get):

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    4/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y )

    Dng 1:intistream::get() ;Cch thc c ca get()c thminh hoqua v dsau:

    charch;ch =cin.get();

    +Nu g ABCth bin ch nhn m k tA, cc k tBCcn li trn dng vo.+Nu g Ath bin ch nhn m k tA, k tcn li trn dng vo.+Nu g th bin ch nhn m k t (bng 10) v dng vo rng.

    Dng 2: istream&istream::get(char&ch) ;

    charc tham chiu bi ch.Ch :+Cch thc c ca getdng 2cng ging nh dng 1+Do get() dng 2trvtham chiu ti istream, nn c thsdng cc phng thc get() dng 2niui nhau v cng c thkt hp vi ton t>>. V d:

    cin.get(ch1); cin.get(ch2); cin.get(ch3);

    c thvit chung trn mt cu lnh sau:cin.get(ch1).get(ch2) >> ch3;

    Dng 3:istream&istream::get(char*str, intn, chardelim =\n);

    Dng c mt dy k t(kckhong trng) v a vo vng nhdostr trti. Qu trnhc kt thc khi xy ra mt trong 2tnh hung sau:+Gp k tgii hn (cho trong delim). K tgii hn mc nh l \n (Enter)+ nhn (n-1) k t

    Ch :+K tkt thc chui \0c bsung vo dy k tnhn c+k tgii hn vn cn li trn dng nhp dnh cho cc lnh nhp tip theo.+Cng ging nh get() dng 2, c thvit cc phng thc get() dng 3ni ui nhau trn mt dnglnh, v cng c thkt hp vi ton t>>+K tcn li trn dng nhp c thlm tri phng thc get() dng 3. V dxt on chtrnh:

    charht[25], qq[20], cq[30];cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    5/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y )

    th cu lnh get()u tin snhn c chui Pham Thu Huong ct vo mng ht. K tcnslm tri 2cu lnh get tip theo. Do cu lnh cui cng schinra Pham Thu Huong.

    khc phc tnh trng trn, c thdng mt trong cc cch sau:

    +Dng phng thc get() dng 1hoc dng 2ly ra k ttrn dng nhp trc kdng get (dng 3).

    +Dng phng thc ignorely ra mt sk tkhng cn thit trn dng nhp trc khi dget dng 3.

    cin.ignore(n) ;// Ly ra (loi ra hay bqua) n k ttrn dng nhp.

    Nh vy c thnhp c cqu qun v c quan, cn sa li on chng trnh trn nh sau:

    charht[25], qq[20], cq[30];cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    6/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y )

    hoc ignore();hoc get() dng 1hoc get() dng 2

    loi bk tcn li ra khi dng nhp trc khi thc hin vic nhp k thoc chui k t

    4.CC HM THNH VIN KHC

    Cc hm thnh vin khc ca istream

    - Hm ignore dng bqua (loi b) mt sk ttrn dng nhp.

    istream&ignore(intn =1, intdelim =EOF);//bqua n n k thoc n lc bt gp eof.

    - Hm putback():istream&putback(charch);

    t mt k tngc li dng nhp

    - Hm peek():intpeek();Hm trvk tktip m khng trch n tdng.

    Cc hm thnh vin khc ca ostream

    - Xut k tbng hm thnh vin put

    ostream&put(charch);

    C thgi lin v dcout.put('A').put('\n');khi ton tdu chm(.)c tnh ttri sang phi

    - ng bdng nhp v dng xut

    Mc nh cin v cout c ng b: std::cin.tie(&std::cout);do ta thy nhng g c nhp vo bphm khng cn qua bm m hin ngay ln mn hnh.ng bcc cp IO khc ta cng dng cphp instream.tie( &outstream);( instream v outstream l tn stream )

    bng b: instream.tie( 0);

    Nhp xut khng nh dngNhp/xut mc thp (ngha l nhp/xut khng nh dng) ch nh c th s byte no phi c dchuyn hon ton t thit b ti b nh hoc t b nh ti thit b. V khng c cc x l trung gian ncung cp tc v dung lng cao, nhng cch ny khng tin li lm cho lp trnh vin.

    Nhp/xut khng nh dng c thc hin vi cc hm thnh vin istream::read()v ostream::write()

    - Hm istream::read():

    istream&read(unsignedchar*puch, intnCount);

    Trch cc byte t dng cho n khi gii hn nCount t n hoc cho n khi end-of-filet Hm ny c ch cho dng nhp nh phn.

    - Hm ostream::write():

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    7/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y )

    ostream&write(constunsignedchar*puch, intnCount);

    Chn nCount byte vo t vng m (c tr bi puch v psch)vo dng. Nu filec m ch text, cc k t CR c th c chn vo. Hm ny c ch cho dng xut nh phn. Chhn:

    charBuff[]="HAPPY BIRTHDAY";cout.write(Buff,10);

    - Hm intistream::gcount()tr v s k t trch bi hm nhp khng nh dng cui cng.

    5.CC TRNG THI DNG

    Khi nim c:cha trong mt bit, c 2trng thi:Bt (on) c gi tr1Tt (off) c gi tr0

    Mi stream lu gi nhng c trng thi cho ta bit thao tc nhp, xut c thnh cng hay khng, v nguyn nhgy li. Cc c ny, cng nh c nh dng, thc cht l cc phn t ca 1 vector bit ( 1 s nguyn ). Chng bgm.

    goodbit: bt khi khng c li xy ra v cc c khc u tt. eofbit: bt khi gp end-of-file. failbit: bt khi vic nhp tr nn khng chnh xc nhng stream vn n. V d nh thay v nhp s

    nguyn th ngi dng li nhp k t. badbit: bt khi bng cch no stream b hng v mt d liu.

    Cc ctrn c thc truy xut thng qua cc hm tng ng:good(), eof(), fail() v bad()Bn c thly ton bcc cbng hm ios::iostaterdstate();Xem v dbn di:

    intx;cout x;// The state of the stream can be gotten with rdstate.ios::iostateflags =cin.rdstate();// We can test for which bits are set as follows.// Note the use of the bitwise & operator.// It's usually easier to test the bits directly:if(flags &ios::failbit)cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    8/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y )

    cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    9/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y )

    cout.width(5);// rng quy nh l 5cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    10/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    ***-3.16**-23.45

    6.3. Cnh dng

    6.3.1. Cc cnh dng

    C thchia cc cthnh cc nhm:

    Nhm 1gm cc cnh v(cn l) :

    -ios::left:Khi bt cios:left th gi trinra nm bn tri vng quy nh, cc k tn nm sau

    -ios::right:Khi bt cios:right th gi trinra nm bn phi vng quy nh, cc k tn nm trc.

    -ios::internal:Cios:internalc tc dng ging nh cios::rightchkhc l du (nu c) inu tin

    Mc nh cios::rightbt.

    Nhm 2gm cc cnh dng snguyn:

    +Khi ios::decbt (mc nh):Snguyn c indi dng c s10+Khi ios::octbt : Snguyn c indi dng c s8+Khi ios::hexbt : Snguyn c indi dng c s16Nhm 3gm cc cnh dng sthc:ios::fxed ios::scientific ios::showpointMc nh:Cios::fixedbt (on) v cios::showpointtt (off).+Khi ios::fixedbt v cios::showpointtt th sthc inra di dng thp phn, schsphn phn (sau dchm) c tnh bng chnh xc n nhng khi inth bi cc chs0cui.V dnu chnh xc n =4th:

    Sthc -87.1500 c in: -87.15Sthc 23.45425 c in: 23.4543Sthc 678.0 c in: 678

    +Khi ios::fixedbt v cios::showpointbt th sthc inra di dng thp phn, schsphn phn (saudu chm) c inra ng bng chnh xc n.V dnu chnh xc n =4th:

    Sthc -87.1500 c in: -87.1500Sthc 23.45425 c in: 23.4543Sthc 678.0 c in: 678.0000

    +Khi ios::scientificbt v cios::showpointtt th sthc inra di dng m (dng khoa hc). Schsph

    phn (sau du chm) ca phn nh tr c tnh bng chnh xc n nhng khi inth bi cc chs0cV dnu chnh xc n =4th:

    Sthc -87.1500 c in: -8.715e+01Sthc 23.45425 c in: 2.3454e+01Sthc 678.0 c in: 6.78e+02

    +Khi ios::scientificbt v cios::showpointbt th sthc inra di dng m. Schsphn phn (sau dchm) ca phn nh tr c inng bng chnh xc n.V dnu chnh xc n =4th:

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    11/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    Sthc -87.1500 c in: -8.7150e+01Sthc 23.45425 c in: 2.3454e+01Sthc 678.0 c in: 6.7800e+01

    Nhm 4gm cc hin th:ios::showpos ios::showbase ios::uppercase

    C ios::showpos+Nu cios::showpostt (mc nh) th du cng khng c intrc sdng.+Nu cios::showposbt th du cng c intrc sdng.C ios::showbase+Nu cios::showbasebt th snguyn h8c inbt u bng k t0v snguyn h16c bt bng cc k t0x. V dnu a =40th:

    dng inh8l: 050dng inh16l 0x28

    +Nu cios::showbase tt (mc nh) th khng in0trc snguyn h8v khng in0x trc snguyn h16. V dnu a =40th:

    dng inh8l: 50dng inh16l 28

    C ios::uppercase+Nu cios::uppercase bt th cc chsh16(nh A, B, C, ...) c indi dng chhoa.+Nu cios::uppercase tt (mc nh) th cc chsh16(nh A, B, C, ...) c indi dng chthng

    6.3.2. Cc phng thc bt tt cCc phng thc ny nh ngha trong lp ios.+Phng thclongcout.setf(longf) ;sbt cc clit k trong f v trvmt gi trlongbiu thcc cang bt. Thng thng gi trf c xcnh bng cch thp cc ctrnh by trong mc 6.1.V d:

    cout.setf(ios::showpoint|ios::scientific) ;sbt cc cios::showpointv ios::scientific.

    +Phng thclongcout.unsetf(longf) ;stt cc clit k trong f v trvmt gi trlongbiu thcc cang bt. Thng thng gi trf c xcnh bng cch thp cc ctrnh by trong mc 6.1.V d:

    cout.unsetf(ios::showpoint|ios::scientific) ;stt cc cios::showpointv ios::scientific.

    +Phng thclongcout.flags(longf) ;c tc dng ging nh cout.setf(long). V d:cout.flags(ios::showpoint|ios::scientific) ;sbt cc cios::showpointv ios::scientific.+Phng thclongcout.flags() ;

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    12/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    strvmt gi trlongbiu thcc cang bt.

    6.4.Cc bphn nh dng v cc hm nh dng 6.4.1. Cc bphn nh dng (nh ngha trong )Cc bphn nh dng gm:

    dec //nhcios::decoct //nhc ios::octhex //nhc ios::hexendl //xut k t\n (chuyn dng)ends //xut k t\0 (null)flush //y dliu ra thit bxut

    Chng c tc dng nhcnh dng nhng c vit ni ui trong ton txut nn tin sdng hn.V d:

    cout.setf(ios::showbase)cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    13/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    Ch 1:C thdng cc dng cerr v clog xut ra mn hnh nh dng i vi cout.Ch 2: V clog c thm bm, nn dliu c a vo bm. Khiy bm th a dliu tbra dng clog. V vy trc khi kt thc xut cn dng phng thc:clog.flush()y dliu tbm raclog.Clog thng c sdng cho cc ng dng u tin vtc .

    Chng trnh sau minh hocch dng dng clog. Chng ta nhn thy, nu bcu lnh clog.flush() th skhnnhn thy kt quxut ra mn hnh khi chng trnh tm dng bi cu lnh cin.get()

    floatx=-87.1500;clog.setf(ios::scientific);clog.precision(4);clog.fill('*');clog.width(10);clog

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    14/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    8.1.Cc lp dng nhp, xut d liu ln file

    Nh ni trn, C++ cung cp 4 dng tin chun lm vic vi bn phm v mn hnh. Mun nhp xuln tp chng ta cn to cc dng tin mi (khai bo cc i tng Stream) v gn chng vi mt tp c th. Ccung cp 3 lp stream lm iu ny, l cc lp:

    ofstream dng to cc dng xut (ghi tp)

    ifstream dng to cc dng nhp (c tp)

    fstream dng to cc dng nhp, dng xut hoc dng nhp-xut

    S dn xut cc lp nh sau:

    8.2.Cch s dng fstream :

    nh ngha 1 itng file ta dng c php fstream dataFile;(y dataFile ch l tn do ngi dng t m thi )

    m 1 file ta dng c php sau :

    dataFile.open("info.txt", ios::out);

    Hoc n gin truyn tham s vo constructor:

    fstream dataFile("info.txt", ios::out);

    y i hi 2 i s : i th nht l 1 chui tn cha tn file. i th 2 l ch ( mode) m filev ci nycho ta bit ch no m chng ta dng m file. v d trn th tn file l info.txt cn flag file y lios::out. Ci ny n ni cho C++ bit chng ta m file ch xut ra.Ch xut ra cho php d liu c th c ghi vo file.

    datafile.open("info.txt", ios::in);

    Cn v d ny th tc l ta ang m file ch nhp vo, tc l cho php d liu c c vo t file.+ Tham s mode c gi tr mc nh l ios::out (m ghi). Tham s ny c th l mt trong cc gi tr sau:

    ios::binary ghi theo kiu nh phn (mc nh theo kiu vn bn) ios::out ghi tp, nu tp c th n b ghi

    ios::app ghi b sung vo cui tp

    ios::ate chuyn con tr tp ti cui tp sau khi m tp

    ios::trunc xo ni dung ca tp nu n tn ti

    ios::nocreate nu tp cha c th khng lm g (b qua)

    ios::noreplace nu tp c th khng lm g (b qua)

    Chng ta th s dng nhng ch trn chung vi nhau v chng s c kt ni vi nhau bng ton t |.

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    15/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    V d: fstream dataFile("info.txt", ios::in | ios::out);

    Dng lnh trn cho php ta m file info.txt c 2 ch xut v nhp.Ch : Khi dng ring l th ios::out s xa ni dung ca file nu file c to sn. Tuy nhin nu dng chuvi ios::in, th ni dung file c s c gi li. V nu file cha c to, n s to ra 1 file mi cho chng talun.

    8.3.Cc thap tc c bn

    Ghi/oc file(nh cout, cin) outClientFile > myVariable

    ng file outClientFile.close();

    By gi l 1 v d hon chnh :

    // This program uses an fstream object to write data to a file.#include #include usingnamespacestd;

    intmain(){

    fstream dataFile;

    cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    16/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    #include #include #include

    usingnamespacestd;boolOpenFile(fstream &file, char*name);voidShowContents(fstream &file);

    intmain(){

    fstream dataFile;if(!OpenFile(dataFile, "demo.txt")){

    cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    17/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    //tinn bytefileObject.seekg(y, ios::end)//li y byte ktcuifilefileObject.seekg(0, ios::cur)//ncuifile//seekp tngtlocation = fileObject.tellg()

    //lyvtr chinticafileObject

    8.7.File nh phn8.7.1.nh ngha:

    File nh phn l file cha ni dung khngnht thit phi l ASCII text.

    Tt c nhng file t u ti gi chng ta thao tc u dng mc nh l text file. C ngha l d liu trongnhng file ny u c nh dng di m ASCII. Thm ch l s i chng na khi n c lu trong file ton t

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    18/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    char data[] = {'A', 'B', 'C', 'D'};file.write(data, sizeof(data));

    Trong v dny th i th 1 l tn ca mng (data). V khi ta truyn tham s l tn ca mng th tc l ta truyn con tr tr ti v tr u tin ca mng.i th 2 cng c ngha tng t nh v d 1. V sau khi gp thc hin th ni dung ca mng s c ghi vo file nh phn tng ng vi i tng file.

    8.7.1.2.Read

    Hm read th s dng c vo s d liu nh phn t file vo b nh my tnh. Dng tng qut l :fileObject.read(address, size);- y fileObject l tn ca i tng file stream.-address l a ch u tin m vng nh m d liu c c vo c lu. V i ny c th l a ch ca t hay 1 con tr ti kiu char.-size cng l s lng byte trong b nh c c vo t file. V i ny bt buc cng phi l s kiu integenguyn dng ).Tng t hm read ta cng c 2 v d sau :

    char letter;file.read(&letter, sizeof(letter));

    v :

    char data[4];file.read(data, sizeof(data));

    Nu chng ta mun ghi cc kiu khc vo file nh phn th ta phi dng c php c t bit sau y.

    reinterpret_cast(value)

    c php trn th dataType s l kiu d liu m chng ta mun p v, v value s l gi tr m chng ta mu

    p v dng byte.V d :

    int x = 65;file.write(reinterpret_cast(&x), sizeof(x));

    i vi mng th :

    const int SIZE = 10;int numbers[SIZE] = {1,2,3,4,5,6,7,8,9,10};file.write(reinterpret_cast(numbers), sizeof(numbers));

    V d:

    // This program uses the write and read functions.#include #include usingnamespacestd;

    intmain(){

    constintSIZE =10;fstream file;intnumbers[SIZE]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    // Open the file for output in binary mode.

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    19/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    file.open("numbers.dat", ios::out|ios::binary);

    // Write the contents of the array to the file.cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    20/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    friendistream &operator >>(istream &In,point &P);};ostream &operator

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    21/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    return0;}

    III. CONTAINER & ITERATOR

    1. Tng quan vcontainerContainer (thng cha)l khi nim chcc i tng lu trcc i tng (gi tr) khc. i tng contascung cp cc phng thc truy cp cc thnh phn (element) ca n.

    Container no cngc cc phng thc sau y:

    Phng thc M tsize() Slng phn tempty () Trv1 nu container rng, 0 nu ngc li.max_size() Trvslng phn tti a c cp pht== Trv1 nu hai container ging nhau

    != Trv1 nu hai containerkhc nhaubegin() Trvcon tr n ph n tu tin ca containerend() Trvcon tr n ph n tcui cng ca containerfront() Trvtham chiu n phn tu tin ca containerback() Trvtham chiu n phn tcui cng ca containerswap() Hon i 2 container vi nhau (ging vic hon i gi trca 2 bin)

    Cc container chia lm 2 loi:

    o Sequential container (cc ctdl tun t) bao gm list, vector v dequeo Asociative container (cc ctdl lin kt) bao gm map, multimap, set v multiset

    Container M t Heade

    Bitset Mt chui bit

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    22/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    Bi v tn kiu sdng trong container nm trong mt lp template khai bo ty , do cc kiu ny c kbo typedef thnh cc tn v c ngha.Cc tn ny lm cho nh ngha cc container khchuyn hnMt vtn typedef phbin c a ra trong bng sau:

    Typedef Name M t

    size_type Mt s nguyn ( tng ng size_t)reference Mt tham chiu n 1 phn t

    const_reference Mt tham trn mt phn t.

    iterator Mt bin lp

    const_iterator Mt tham trlp

    reverse_iterator Mt bin lp ngc

    const_reverse_iterator Mt tham trlp ngc

    value_type Kiu dliu c lu trtrong container

    allocator_type Kiu ca allocator.

    key_type Kiu ca kha.

    key_compare Loi hm so snh 2 kha

    value_compare Loi hm so snh 2 gi tr.

    Mc d khng thxem xt k tt ccc loi container trong chng ny, nhng phn sau snghin cu k 3i din: vector, list, map v 1 thhin hu dng ca vector l string.Mt khi bn hiu c cch m nhngcontainer ny lm vic, th bn skhng gp kh khn g trong vic sdng nhng loi khc.

    2. Iterator (b lp)

    L khi nim s dng ch mt con tr tr n cc phn t trong 1 container. Mi container c mt loi iterkhc nhau. Trong th vin STL th ngi ta tch hp lp i tng Iterator cng vi cc container. T tngthhin nh sau:

    o Cc i tng Iterator l cc con trn cc i tng ca lp lu tr:typedef__gnu_cxx::__normal_iterator iterator;

    o Khai bo lp Iterator nh l 1 lp nm trong lp lu tr.o Xc nh trong lp lu trcc phng thc thnh phn nh:

    begin() trli con trkiu i tng Iterartor n phn tu tin ca nm trong i tnglu tr.

    end() trli con trkiu Iterator trn 1 i tng no bn ngoi tp cc phn tlu tr. i tng bn ngoi no c thc cc nh ngha khc nhau.Trong trng hpthnh vector ta c thhiu l trn phn tsau phn tcui cng.

    o Xc nh trong lp i tng kiu Iterator cc ton tnh sau: ++p hoc p++ : chuyn iterator p n phn tktip. --p hoc p-- : chuyn iterator p n phn tng trc n. *p : xc nh gi trca phn tm iterator p trn.

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    23/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    Nh bn bit, mng v con trc mi quan hcht chvi nhau trong C++. Mt mng c thc truy xutthng qua con tr. Stng ng ny trong STL l mi quan hgia iterator v container. N cung cp chochng ta khnng xl theo chu k thng qua ni dung ca container theo mt cch ging nh l bn sdncon trto xl chu ktrong mng.

    Bn c thtruy xut n cc thnh phn ca mt container bng sdng mt iterator:

    coll;for(::iteratorit =coll.begin();it !=coll.end();++it){

    *it..

    }

    Iterator nh nghath no l phn t u, phn t cui, phn t tip theo ca container, n che i cutrc ni tiv cho php ta vit cc on m tng qut duyt hay chn phn t trn cc container khc nhaum khng cn bit bn trong ca container ra sao.

    C 5 loi i terator c m ttrong bng di.

    Iterator Quy n truy cp

    Random access (RandIter ) Cha v nhn gi tr. Cc thnh phn c thtruy xut ngu nhin

    Bidirectional ( BiIter ) Cha v nhn gi tr. Di chuyn ti trc v sau

    Forward ( ForIter ) Cha v nhn gi tr. Chcho php di chuyn ti.

    Input ( InIter ) Nhn nhng khng lu trgi tr. Chcho php di chuyn ti.

    Output ( OutIter ) Cha nhng khng nhn gi tr. Chcho php di chuyn ti.

    Nu container khai bo const, chng ta phi dng const_iterator thay v iterator:

    constlistlist1;list::const_iteratori =list1.begin();

    STREAM ITERATORS

    Stream Iteartorcung cp kh nng x l trn dng nhp xut, bn c th thm bt, xa sa trc tip trnstream. Mt v d l nhp v in ra 1 container khng cn vng for():

    vector v (istream_iterator (cin), istream_iterator ());copy(v.begin(), v.end(), ostream_iterator(cout, " "));

    REVERSE_ITERATOR

    Trong cc reversible containercn nh ngha thm reverse_iterator (iterator o ngc ). N c nh vtuttheo mt trnh tngc li viiterator. V vy, reverse_iteratoru tin strn cui ca container, tnggi trca reverse_iterator slm n trn thnh phn ng trc Tng ng vi iterator end() v iteratobegin() ta c reverse_iterator rbegin()v reverse_iterator rend();

    V d: duyt list theo 2 chiu

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    24/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    #include #include usingnamespacestd;intmain(){

    intA[] ={3,2,3,1,2,3,5,3};

    intn =sizeof(A)/sizeof(*A);listV;for(inti=0;i

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    25/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    - Khng cn khai bo kch thc ca mng, vector c thtng cp pht bnh, bn skhng phi quan tm n qun l kch thc ca n.- Vector cn c thcho bn bit slng cc phn tm bn ang lu trong n.- Vector c cc phng thc ca stack, c ti u ha vi cc php ton pha ui (rearoperations)

    - Htrtt ccc thao tc c bn nh chn ,xa, sao chp ..3.1.2. C php

    c thdng vector th bn phi thm 1 header #include v phi c using std::vectC php ca vector cng rt n gin, v d:

    vectorv ;vectorv(10);vectorv(10, 2);

    Khai bo vectorv c kiu int. Ch kiu ca vector c trong 2 du ngoc nhn.

    Dng 1 khi to 1 vector c kch thc ban u l 0, v kch thc ca vector c thnng lncho nn khng cn khai bo cho n c bao nhiu phn tcng c. Hoc nu mun th bncng c thkhai bo nh dng 2, nhng cng nhn mnh li rng mc d size = 10, nhng kbn thm vo hoc xo bt i th kch thc ny cng vn thay i c.Trong dng 3 th 10 phn tca vector A sc khi to bng 2.

    ng thi ta cng c thkhi to cho 1 vector sl bn sao ca 1 hoc 1 phn vector khc, vd:

    vector A(10,2);vector B(A);vector C(A.begin(), A.begin() + 5 );//ban sao 5 phan tu dau tien

    Hy theo di v dsau:

    #include #include

    usingnamespacestd;intmain(){

    vectorV(3);V[0] =5;V[1] =6;V[2] =7;

    for(inti=0;i

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    26/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    Trng hp xc nh kch thc mng khi chng trnh ang chy, chng ta dng hm dmc nh khai bo mng cha xc nh kch thc, sau dng phng thc resize( sizen ) xc nh kch thc ca mng khi cn.

    3.1.3. Cc phng thc

    3.1.3.1. Cc phng thc ca stack: push_back() v pop_back()

    #include #include usingnamespacestd;intmain(){

    inti;vectorV;for(i=0;i

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    27/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    - Khng nn dng ton t[] truy xut cc phn tm n khng tn ti, ngha l v dvectosize = 10, m bn truy xut 11 l sai. thm vo 1 gi trcho vector m n khng c size trhoc full th ta dng hm thnh vin push_back(), hm ny sthm 1 phn tvo cui vec

    - Tng tvi thao tc xa mt phn tcui ra khi vector, bn cng chcn sdng 1 lnpop_back( )

    Lp tr.nh C++ Nguyn Ph Qu

    3.1.3.2. Xa ti vtr bt k, xa trng

    V d:

    #include #include usingnamespacestd;templatevoidprint(constvector&v){

    for(inti=0;i

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    28/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    intmain (){

    vectorv1(4,100);

    v1.insert( v1.begin()+3, 200); //chn 200 vo trc vtr th3

    v1.insert( v1.begin()+2 ,2,300); //chn 2 ln 300 vo trc vtr th2

    vectorv2(2,400);inta [] ={ 501, 502, 503};v1.insert(v1.begin()+2, a, a+3); //chn mng a (3 phn t) vo trc vtr th

    v1.insert(v1.begin()+4,v2.begin(),v2.end());//chn v2 vo trc vtr th4

    cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    29/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    inta[]={3,2,3,1,2,3,5,7};intn =sizeof(a)/sizeof(*a);vectorv(a, a+n);

    cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    30/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    in tmain(in targc , char**argc){

    vectorso1,so2[10];so1.reserve(10);cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    31/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    32/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    33/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    Reference front();

    Const_reference front() const;

    Trvmt tham chiu n phn tu tinca vector.

    Allocator_type get_allocator() const; Trvvng nhc cp pht cho vector.

    Iterator insert(iterator I, const T&val=T()); Chn val trc tip vo trc thnh phn c

    chnh bi i. bin lp chn phn tc trv.

    Void insert(iterator I, size_type num, const T&val);

    Chn num val mt cch trc tip trc phn tc chnh bi i.

    Template

    Void insert(iterator I, lnlter start, lnltr end);

    Chn chui xc nh tstart n end trc tiptrc mt phn tc chnh bi i.

    Size_type max_size() const; Trvslng phn tln nht m vector cthcha.

    Reference operator[](size_type i) const;

    Const_reference operator[](size_type i) const;

    Trvmt tham chiu n phn tc chnh bi i.

    Void pop_back(); Xa phn tcui cng trong vector.

    Void push_back(cons T&val); Thm vo mt phn tc gi trval vo cuica vector.

    Reverse_iterator rbegin();

    Const_reverse_iterator rbegin() const;

    Trvbin lp nghch chim kt thc cavector.

    Reverse_iterator rend();

    Const_reverse_iterator rend() const;

    Trvmt bin lp nghch chim bt uca vector.

    Void reverse (size_type num); Thit lp kch thc ca vector nhiu nht lbng num.

    Void resize (size_type num, T val =T()); Chuyn i kch thc ca vector c xcnh bi num. Nu nh kch thc ca vectortng ln th cc phn tc gi trval scthm vo cui vector.

    Size_type size() const; Trvslng cc phn thin thi catrong vector.

    Vois swap(vector&ob) Chuyn i nhng phn tc lu trongvector hin thi vi nhng phn ttrong ob.

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    34/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    3.2. LISTList trong STL l danh sch lin kt i. Khng ging nh vector, htrtruy xut mt cch ngu nhin (random access ), mt danh sch chc thc truy xut mt cch tun t. Ngha l nu bn mun truyxut mt phn t bt k trong list th bn phi bt u duytt phn t u tin hoc phn t cui cng clist ri duyt ln ltqua cc iterator n phn t .

    sdng list, bn phi khai bo file header list: #include List c th khi tobng constructor mc nh hoc sao chp t mng, t list khc hay container khc

    inta[10];listlist0;listlist1(a+2,a+7);listlist2(list1.begin()++,--list1.end());

    Cc hm thng dng ca list

    Phng thc M t

    size() Slng phn tca list

    empty () Trv1 nu danh sch l trng, 0 nu ngc li

    max_size() Trvslng phn tti a ca list

    front() Trvphn tu tin ca list

    back() Trvphn tcui cng ca list

    begin() Trvphn tlp u tin ca danh sch

    end() Trvphn tlp cui cng ca danh sch

    sort() Sp xp danh sch vi ton t) less (=)less_equal(

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    59/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    Do thvin gm rt nhiu hm khc nhau, trong khun kh ti liu ny khng th nu htc, xin giithius lc mt snhm hm sau:

    - Nhm cc hm khng thay i container- Nhm cc hm thay i container- Nhm cc hm sp xp

    - Nhm cc hm trn danh sch c sp xp- Nhm cc lm trn heap- Nhm cc hm tm min/max

    1. NHM CC HM KHNG THAY I CONTAINER

    - Cc thut ton tm kim, bao gm find(), find_if() tm theo iu kin, search() dng so khp 1 chuilin tip cc phn tcho trc, hm search_n tm kim vi sln lp xc nh, hm find_end tm kt qcui cng, find_first_not_of(), find_last_not_of()

    //findintA[] ={3,4,2,6,3,1,2,3,2,3,4,5,6,4,3,2,1};intN =sizeof(A) /sizeof(*A);intfirst =find(A, A+N, 1) -A;cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    60/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    - Hmfillt mt vng gi trca 1 container (thng l 1 mng, 1 vector)

    vectorv(8); // v: 0 0 0 0 0 0 0 0fill(v.begin(),v.begin()+4,5); // v: 5 5 5 5 0 0 0 0fill(v.begin()+3,v.end()-2,8); // v: 5 5 5 8 8 8 0 0

    - Hm generatessinh tng phn ttrong khong no y ca vector bng cch gi hm c ch

    ( mt hm trvcng kiu v khng c i s)

    templatevoidgenerate(ForwardIterator first, ForwardIterator last, Generator gen);

    V dvi hm rand():

    vectorV;srand(time(NULL));//...

    generate( V.begin(), V.end(), rand );

    - Hm for_eachdng duyt tng phn t trong mt chui cc phn t cho trcDng for_each inra cc phn t, v d:

    voiddisplay(conststring&s){cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    61/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    v3.resize(v1.size());transform(v1.begin(),v1.end(),v2.begin(),v3.begin(),addition);

    Phin bn th hai s ly tt c phn t t v1.begin() n v1.end(), transform chng bng hm additionvi i s th hai l tt c phn t t v2.begin(), sau chp gi tr transform vo bt u tv3.begin()

    - Thay th cc gi tr (replace)

    intmyints[] ={ 10, 20, 30, 30, 20, 10, 10, 20};vectora (myints, myints+8); // 10 20 30 30 20 10 10 20replace(a.begin(), a.end(), 20, 99); // 10 99 30 30 99 10 10 99

    - Hm replace_ifcho php tm gi tr theo iu kin do mt hm trv. s dng lnh ny bn phikhai bo 1 hm c gi tr tr v l bool nhn tham s l gi tr ca 1 element. Khi hm tr v true, gi ttng ng s b thay th bi gi tr mi. Hm kim tra nn khai bo inline tc nhanh hn.

    vectora;// set some values:for(inti=1;i

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    62/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    #include #include #include

    usingnamespacestd;

    boolIsOdd(intx){

    returnx%2;}

    intmain(){

    inta[]={3,1,4, 8, 5, 2, 9};intn =sizeof(a)/sizeof(*a);vectorvec(a, a+n);vector::iteratornew_end =

    remove_if( vec.begin(), vec.end(), IsOdd );vec.erase(new_end, vec.end());copy(vec.begin(), vec.end(), ostream_iterator(cout, " "));// The output is "4 8 2".return0;

    }

    - Cc hm c hu t_copy nh remove_copy, remove_if_copy, replace_copy, replace_if_copy,reverse_copy sdng tng tnhng to ra v thao tc trn bn sao container

    3.NHM CC HM SP XP

    - Hm sort ( quicksort )

    Hm ny c 2phin bn:

    +Sp xp li mt chui phn t theo th t tng dn (ascending)

    sort (v.begin(),v.end());

    +Sp xp li mt chuiphn t tha mt binary predicate

    sort(A, A+N, greater() );Hoc:

    templateclassBigger{public:

    booloperator()(constT&t1,constT&t2){returnt1>t2;}};templateclassOutput{public:

    voidoperator()(constT&t){cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    63/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    sort(v.begin(),v.end(),Bigger());for_each(v.begin(),v.end(),Output());return0;

    }

    - Hm is_sorted kim tra xem 1 chui c sp xp hay cha:

    intA[] ={1, 4, 2, 8, 5, 7};constintN =sizeof(A) /sizeof(int);

    assert(!is_sorted(A, A +N));sort(A, A +N);assert(is_sorted(A, A +N));

    4.NHM CC HM TRN DANH SCH C SP XP

    Mt sthut ton nhtm kim, thm vo danh sch... hot ng nhanh hn (phc tp l log2n thav n). Thvin htrmt shm lm vic ring vi cc danh sch sp xp theo tht

    tng dn.

    - Tm cn di v cn trn (lower_bound, upper_bound)

    Hm lower_bound(first, last, value) trviterator ca element cui cng trong danh sch sp xp cgi trkhng vt qu [value].

    Hm upper_bound(first, last, value) trv iterator ca element u tin c gi tr ln hn [valu

    intmyints[] ={10,20,30,30,20,10,10,20};intsize =sizeof(myints)/sizeof(myints[0]);vectorv(myints,myints+size); // 10 20 30 30 20 10 10 20vector::iteratorlow,up;sort (v.begin(), v.end()); // 10 10 10 20 20 20 30 30low=lower_bound (v.begin(), v.end(), 20);up=upper_bound (v.begin(), v.end(), 20);cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    64/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    intfirst[] ={5,10,15,20,25};intsecond[] ={50,40,30,20,10};vectorv(10);vector::iteratorit;sort (first,first+5);sort (second,second+5);merge (first,first+5,second,second+5,v.begin());

    //5 10 10 15 20 20 25 30 40 50

    - Cc php ton trn tp hp:

    - Xc nhn tp con includes

    intA1[] ={ 1, 2, 3, 4, 5, 6, 7};intA2[] ={ 1, 4, 7};intA3[] ={ 2, 7, 9};

    constintN1 =sizeof(A1) /sizeof(int);constintN2 =sizeof(A2) /sizeof(int);

    constintN3 =sizeof(A3) /sizeof(int);

    cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    65/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    vector::iteratorend_it=set_difference(first, first+5, second, second+5, v.begin());//10 10 15 40

    - Php tr tp hp( set_symmetric_difference ) gn ging set_difference nhngkhc chnu c 1 phn t lp n ln tp 1 v m ln tp 2 th n s xut hin |m-n| ln output.

    5. CC HM TRN HEAP

    Bao gm to heap (make_heap), thm phn tvo heap (push_heap), xa phn tkhi heap(pop_heap), sp xp heap (sort_heap)

    // range heap example#include #include #include

    usingnamespacestd;

    intmain (){

    intmyints[] ={10,20,30,5,15};vectorv(myints,myints+5);vector::iteratorit;make_heap (v.begin(),v.end());cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    66/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    1.CONTAINER ADAPTER (CC BTNG THCH LU TR)

    Bao gm stack, queue v priority_queue

    Gi l cc btng thchbi v n lm cc blu trkhc trnn tng thch vi n bng cch nggi (encapsulate) cc blu trkhc trthnh blu trc sca n. V d:

    stacks;

    Khi vector trthnh blu trc sca btng thch stack.Nu khng khai bo blu trc s, stack v queue mc nh sdng deque lm blu trc s,trong khi priority_queue mc nh sdng vector lm blu trc s, c ngha l khi khai bo

    stacks; thc ra l stacks;Lu 2cstack v queue u c cc hm sau

    voidpush(T) thm phn tvovoidpop(T) gphn tra

    stack c thm hm T top() truy xut phn tnhqueue c thm hm:

    T front() truy xut phn ttip theoT back() truy xut phn tcui cng ca queue

    priority_queuel queue trong phn tu tin lun lun l phn tln nht theo mt tiu chun sxp no , priority_queue ging nh khi nim heap (ng) m ta bit (heap v gii thut heapsortrong mn CTDL)

    Thc ra priority_queue chl queue mc nh c ci sn thm comparator lessging nh associative container thi. Tac thci li comparator dota nh ngha cho n (v dbi di y cigreater)

    #include classPlane{

    intfuel;public: Plane(intfuel){(*this).fuel=fuel;}

    friend ostream&operator

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    67/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    Lu l priority_queue c push, pop v top, khng c front v back

    2.ITERATOR ADAPTER (CC BTNG THCH CON TR)

    Cc btng thch iteratorthay i cc vn hnh ca iterator, thng l lm container v iterator khctrnn tng thch vi n, bng cch ng gi (encapsulate) cc container v iterator khc tr thnhcontainer v iterator c sca n. Chng c dng khai bo c bn nh sau:

    #includetemplateclassIteratorAdapter{

    //ni dung};IteratorAdaptervectorIntAdapter;

    Mt s Adapter thng c s dng l reverse_iterator, insert_iterator, back insert iterator, front inseiterator

    listL;L.push_front(3);back_insert_iteratorii(L);*ii++=0;*ii++=1;*ii++=2;copy(L.begin(), L.end(), ostream_iterator(cout, " "));// The values that are printed are 3 0 1 2

    Khng hc thm viterator adapter

    3.FUNCTION ADAPTER (CC BTNG THCH HM)

    C 2btng thch hm chng ta hc trc l bind1st v bind2nd. Chng ta sp hc not1, not2mem_fun, mem_fun_ref v ptr_fun. Tt cu nm trong th vin functional

    - not1i gi trtrvca mt unary predicate tfalsethnh truev ngc li, unary predicate phi c

    ngha l unary_functionV ddng IsOdd tm cc schn (ngha l IsOdd trvnot(true))

    classIsOdd:publicunary_function{public:booloperator()(constint&n) const{returnn%2;}};intmain(intargc, char*argv[]){

    inta[] ={1,2,3,4,5};cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    68/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    - not2i gi trtrvca mt binary predicate tfalsethnh truev ngc li, binary predicate phi cnh ngha l binary_functionV ddng compare so snh 2mng vi cc phn tkhng bng nhau (ngha l compare trvnot(true))

    classcompare:publicbinary_function{public:booloperator()(inti,intj) const{returni==j;}};intmain(intargc, char*argv[]){

    inta[] ={1,2,3,4,5};intb[] ={6,7,8,9,10};cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    69/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    doublesum =accumulate(s.begin(),s.end(),0.0,ptr_fun(acc));}

    y dng ch c hm accumulate ( ca th vin ).Hm ny c truyn vo functor ac(doptr_fun chuyn tfunction thnh functor) tham sl total =0.0v ln lt l cc phn tca set, acc tnh tng total v cc element ri trvaccumulate tch ly v cui cng trgi trra bin su

    ptr_fun chdng cho stand-alone v staticmember function, vi non-staticmember function phi 2 hmdi y:

    - mem_fun v mem_fun_ref

    +mem_funChuyn mt hm thnh vin (member function) ca mt lp thnh mt functor v truyn vo functor ncc i sl cc con trm trn cc i tng ca lp

    classPerson{intage;

    public:Person(intage):age(age){}intdisplay(){cout

  • 5/24/2018 T NG QUAN V TH VI N CHU N STL

    70/70

    S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) |

    gi ti tng hm thnh vin ca tng phn tca list, gim hiu sut kinh khngThay vo dng mem_fun hay mem_fun_ref, chcn truyn vo mt con trhay mt tham chiu tihm thnh vin, tng hiu sut r rt.

    KHUYN CO:ptr_fun v mem_fun hay mem_fun_ref, c3 hm ny u trli functor, c sdn

    rt nhiu khng v tng tc v hiu sut chng trnh. So snh gia cc ngn ngvi nhau, nhvnhng c im nh con tr, etc, cng vi nhng hm tin ch c bit trong STL nht l 3 hm ny, cng t c mt mc ch th dng C++ t c tc v hiu sut hn bt k ngn ngbc caono khc. Do hiu v sdng nhun nhuyn 3 hm ny gip tng performanceca chng trnh.