STL for Newbies

Embed Size (px)

Citation preview

  • 7/23/2019 STL for Newbies

    1/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 1

    STL for newbies

    MC LCI. ITERATOR (BIN LP): ......................................................................................................... 3II. CONTAINERS (TH VIN LU TR) ............................................ ......... ............................. 4

    1. Iterator: .................................................................................................................................. 42. Vector (Mng ng): .............................................................................................................. 53. Deque (Hng i hai u): ..................................................................................................... 84. List (Danh sch lin kt): ....................................................................................................... 95. Stack (Ngn xp): .................................................................................................................. 96. Queue (Hng i): ............................................................................................................... 107. Priority Queue (Hng i u tin): ....................................................................................... 118. Set (Tp hp): ...................................................................................................................... 12

    9. Mutiset (Tp hp): ............................................................................................................... 1510. Map (nh x): .................................................................................................................. 1611. Multi Map (nh x): ........................................................................................................ 17

    III. STL ALGORITHMS (TH VIN THUT TON): ....................... ......... ........................... 181. Min, max ............................................................................................................................. 18

    1.1. min............................................................................................................................... 181.2. max .............................................................................................................................. 181.3. next_permutation.......................................................................................................... 181.4. prev_permution ............................................................................................................ 18

    2. Sp xp: ............................................................................................................................... 19

    3. Tm kim nh phn (cc hm i vi on sp xp): ........ ....................... ......... ........ ........ 193.1. binary_search: .............................................................................................................. 193.2. lower_bound: ............................................................................................................... 203.3. upper_bound ................................................................................................................ 20

    IV. TH VIN STRING C++: .................................................................................................. 21

  • 7/23/2019 STL for Newbies

    2/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 2

    Li ni u- C++ c nh gi l ngn ng mnh v tnh mm do, gn gi vi ngn ng my.

    Ngoi ra, vi kh nng lp trnh theo mu ( template ), C++ khin ngn ng lptrnh tr thnh khi qut, khng c th v chi tit nh nhiu ngn ng khc. Sc mnh

    ca C++ n t STL, vit tt ca Standard Template Library - mt th vin templatecho C++ vi nhng cu trc d liu cng nh gii thut c xy dng tng qut mvn tn dng c hiu nng v tc ca C. Vi khi nim template, nhng ngilp trnh ra khi nim lp trnh khi lc (generic programming), C++ ccung cp km vi b th vin chun STL.

    B th vin ny thc hin ton b cc cng vic vo ra d liu (iostream), qun lmng (vector), thc hin hu ht cc tnh nng ca cc cu trc d liu c bn (stack,queue, map, set...). Ngoi ra, STL cn bao gm cc thut ton c bn: tm min, max,

    tnh tng, sp xp (vi nhiu thut ton khc nhau), thay th cc phn t, tm kim(tm kim thng v tm kim nh phn), trn. Ton b cc tnh nng nu trn uc cung cp di dng template nn vic lp trnh lun th hin tnh khi qut hacao. Nh vy, STL lm cho ngn ng C++ tr nn trong sng hn nhiu.

    Trch Tng quan v th vin chun STL- STL kh l rng nn ti liu ny mnh ch vit nh hng v cch s dng STL c

    bn cc bn ng dng trong vic gii cc bi ton tin hc i hi n cu trc dliu v gii thut.

    - Mnh ch yu s dng cc v d, cng nh ngun ti liu t trang webwww.cplusplus.com , cc bn c th tham kho chi tit na.

    - c th hiu c nhng g mnh trnh by trong ny, cc bn cn c nhng kinthc v cc cu trc d liu, cng nh mt s thut ton nh sp xp, tm kim...

    - Vic s dng thnh tho STL s l rt quan trng nu cc bn c nh tham gia cck thi nh Olympic Tin Hc, hay ACM. STL s ni di kh nng lp trnh ca cc

    bn (trch li thy L Minh Hong).- Mi kin ng gp xin gi v a ch: [email protected]

  • 7/23/2019 STL for Newbies

    3/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 3

    - Th vin mu chun STL trong C++ chia lm 4 thnh phn l:

    Containers Library : cha cc cu trc d liu mu (template) Sequence containers

    Vector

    Deque List

    Containers adpators

    Stack

    Queue

    Priority_queue Associative containers

    Set Multiset

    Map Multimap Bitset

    Algorithms Library: mt s thut ton thao tc trn d liu

    Iterator Library: ging nh con tr, dng truy cp n cc phn t d liuca container.

    Numeric library:

    - s dng STL, bn cn khai bo t kha using namespace std; sau cc khai bo

    th vin (cc #include, hay #define,...)- V d:#include #include //khai bo s dng container stack#define n 100using namespace std; //khai bo s dng STLmain() {

    ....}

    - Vic s dng cc hm trong STL tng t nh vic s dng cc hm nh trong class.

    Cc bn c qua mt vi v d l c th thy c quy lut.

    I. ITERATOR (BIN LP):- Trong C++, mt bin lp l mt i tng bt k, tr ti mt s phn t trong 1 phm

    vi ca cc phn t (nh mng hoc container), c kh nng lp cc phn t trongphm vi bng cch s dng mt tp cc ton t (operators) (nh so snh, tng (++),...)

    - Dng r rng nht ca iterator l mt con tr: Mt con tr c th tr ti cc phn t

    trong mng, v c th lp thng qua s dng ton t tng (++). Tuy nhin, cng c

  • 7/23/2019 STL for Newbies

    4/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 4

    cc dng khc ca iterator. V d: mi loi container (chng hn nh vector) c mtloi iterator c thit k lp cc phn t ca n mt cch hiu qu.

    - Iterator c cc ton t nh:

    So snh: == , != gia 2 iterator.

    Gn: = gia 2 iterator. Cng tr: +,- vi hng s v ++,.

    Ly gi tr: *.

    II. CONTAINERS (TH VIN LU TR)- Mt container l mt i tng c th lu tr mt tp cc i tng khc (cc phn t

    ca n). N c thc hin nh cc lp mu ( class templates).

    - Container qun l khng gian lu tr cho cc phn t ca n v cung cp cc hmthnh vin (member function) truy cp ti chng, hoc trc tip hoc thng quacc bin lp (iterator ging nh con tr).

    - Container xy dng cc cu trc thung s dng trong lp trnh nh: mng ng -dynamic arrays (vector), hng i queues (queue), hng i u tin heaps (priorityqueue), danh sch kin kt linked list (list), cy trees (set), mng nh x -associative arrays (map),...

    - Nhiu container cha mt s hm thnh vin ging nhau. Quyt nh s dng loicontainer no cho nhu cu c th ni chung khng ch ph thuc vo cc hm c

    cung cp m cn phi da vo hiu qu ca cc hm thnh vin ca n ( phc tp(t gi mnh s vit tt l PT) ca cc hm). iu ny c bit ng vi containerdy (sequence containers), m trong c s khc nhau v phc tp i vi ccthao tc chn/xa phn t hay truy cp vo phn t.

    1. Iterator:Tt c cc container 2 loi: Sequence container v Associative container u h tr cciterator nh sau (v d vi vector, nhng loi khc c chc nng cng vy).

    /*khai bo iterator it*/vector :: iterator it;/* tr n v tr phn t u tin ca vector */it=vector.begin();/*tr n v tr kt thc (khng phi phn t cui cng nh) ca vector) */it=vector.end();/* khai bo iterator ngc rit */vector :: reverse_iterator rit; rit = vector.rbegin();/* tr n v tr kt thc ca vector theo chiu ngc (khng phi phn tu tin nh*/rit = vector.rend();

    Tt c cc hm iterator ny u c phc tp O(1).

  • 7/23/2019 STL for Newbies

    5/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 5

    2. Vector (Mng ng):Khai bo vector:

    #include .../* Vector 1 chiu */

    /* to vector rng kiu d liu int */vector first;

    //to vector vi 4 phn t l 100vector second (4,100);

    // ly t u n cui vector secondvector third (second.begin(),second.end())

    //copy t vector thirdvector four (third)

    /*Vector 2 chiu*/

    /* To vector 2 chiu rng */vector < vector > v;

    /* khai bo vector 510 */vector < vector > v (5, 10) ;

    /* khai bo 5 vector 1 chiu rng */vector < vector > v (5) ;

    //khai bo vector 5*10 vi cc phn t khi to gi tr l 1vector < vector > v (5, vector (10,1) ) ;

    Cc bn ch 2 du ngoc khng c vit lin nhau.V d nh sau l sai:

    /*Khai bo vector 2 chiu SAI*/vector v;

    Cc hm thnh vin:

    Capacity:- size : tr v s lng phn t ca vector. PT O(1).- empty : tr v true(1) nu vector rng, ngc li l false(0). PT

    O(1).

    Truy cp ti phn t:- operator [] : tr v gi tr phn t th []. PT O(1).- at : tng t nh trn. PT O(1).

  • 7/23/2019 STL for Newbies

    6/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 6

    - front: tr v gi tr phn t u tin. PT O(1).- back: tr v gi tr phn t cui cng. PT O(1).

    Chnh sa:- push_back : thm vo cui vector. PT O(1).- pop_back : loi b phn t cui vector. PT O(1).

    - insert (iterator,x): chn x vo trc v tr iterator ( x c thl phn t hay iterator ca 1 on phn t). PT O(n).- erase : xa phn t v tr iterator. PT O(n).- swap : i 2 vector cho nhau (v d: first.swap(second);). PT O(1).- clear: xa vector. PT O(n).

    Nhn xt:- S dng vector s tt khi:

    o Truy cp n phn t ring l thng qua v tr ca n O(1)o Chn hay xa v tr cui cng O(1).

    - Vector lm vic ging nh mt mng ng.

    V d 1: V d ny ch yu lm quen s dng cc hm ch khng c bi c th.

    #include #include using namespace std;vector v; //Khai bo vectorvector ::iterator it; //Khai bo iteratorvector ::reverse_iterator rit; //Khai bo iterator ngcint i;

    main() {for (i=1;i

  • 7/23/2019 STL for Newbies

    7/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 7

    /*Ch : Khng nn vitfor (i=0;i

  • 7/23/2019 STL for Newbies

    8/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 8

    //Khai bo vector 2 chiu vi 10001 vector 1 chiu rngint m,n,i,j,u,v;main() {

    /*Input data*/cin >> n >> m;for (i=1;i> u >> v;a[u].push_back(v);a[v].push_back(u);

    }/*Sort cnh k*/for (i=1;i

  • 7/23/2019 STL for Newbies

    9/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 9

    4. List (Danh sch lin kt):- List c thc hin nh danh sch ni kp (doubly-linked list). Mi phn t trong

    danh sch ni kp c lin kt n mt phn t trc v mt phn t sau n.

    -

    Do , list c cc u im nh sau:o Chn v loi b phn t bt c v tr no trong container. O(1).- im yu ca list l kh nng truy cp ti phn t thng qua v tr. O(n).- Khai bo: #include

    Cc hm thnh vin:

    Capacity:- size : tr v s lng phn t ca list. PT O(1).- empty : tr v true(1) nu list rng, ngc li l false(0). PT

    O(1).

    Truy cp phn t:- front: tr v gi tr phn t u tin. PT O(1).- back: tr v gi tr phn t cui cng. PT O(1).

    Chnh sa:- push_back : thm phn t vo cui list. PT O(1).- push_front : thm phn t vo u list. PT O(1).- pop_back : loi b phn t cui list. PT O(1).- pop_front : loi b phn t u list. PT O(1).- insert (iterator,x): chn x vo trc v tr iterator ( x c th

    l phn t hay iterator ca 1 on phn t). PT l s phn t thmvo.

    - erase : xa phn t v tr iterator. PT l s phn t b xa i.- swap : i 2 list cho nhau (v d: first.swap(second);). PT O(1).

    - clear: xa list. PT O(n).

    Operations:- splice : di chuyn phn t t list ny sang list khc. PT O(n).- remove (const) : loi b tt c phn t trong list bng const. PT

    O(n).- remove_if (function) : loi b tt cc phn t trong list nu hm

    function return true . PT O(n).- unique : loi b cc phn t b trng lp hoc tha mn hm no .PT O(n). Lu : Cc phn t trong list phi c sp xp.

    - sort : sp xp cc phn t ca list. O(NlogN)- reverse : o ngc li cc phn t ca list. O(n).

    5. Stack (Ngn xp):- Stack l mt loi container adaptor, c thit k hot ng theo kiu LIFO (Last -

    in first - out) (vo sau ra trc), tc l mt kiu danh sch m vic b sung v loi bmt phn t c thc hin cui danh sch. V tr cui cng ca stack gi l nh(top) ca ngn xp.

    Khai bo: #include Cc hm thnh vin:

  • 7/23/2019 STL for Newbies

    10/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 10

    - size : tr v kch thc hin ti ca stack. PT O(1).- empty : true stack nu rng, v ngc li. PT O(1).- push : y phn t vo stack. PT O(1).- pop : loi b phn t nh ca stack. PT O(1).- top : truy cp ti phn t nh stack. PT O(1).

    Chng trnh demo:

    #include #include using namespace std;stack s;int i;main() {

    for (i=1;i

  • 7/23/2019 STL for Newbies

    11/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 11

    cout

  • 7/23/2019 STL for Newbies

    12/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 12

    priority_queue p; // p={}p.push(1); // p={1}p.push(5); // p={1,5}cout

  • 7/23/2019 STL for Newbies

    13/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 13

    - Khi duyt set theo iterator t begin n end, cc phn t ca set s tng dn theo phpton so snh.

    - Mc nh ca set l s dng php ton less, bn cng c th vit li hm so snh theo mnh.

    -

    Set c thc hin ging nh cy tm kim nh phn (Binary search tree).Khai bo:

    #include set s;set s;

    Hoc vit class so snh theo mnh:

    struct cmp{bool operator() (int a,int b) {return a

  • 7/23/2019 STL for Newbies

    14/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 14

    it=s.find(5);if (it==s.end()) cout

  • 7/23/2019 STL for Newbies

    15/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 15

    9. Mutiset (Tp hp):- Multiset ging nh Set nhng c th cha cc kha c gi tr ging nhau.- Khai bo : ging nh set.

    - Cc hm thnh vin:Capacity:

    - size : tr v kch thc hin ti ca multiset. PT O(1)- empty : true nu multiset rng, v ngc li. PT O(1).

    Chnh sa:- insert : Chn phn t vo set. PT O(logN).- erase :

    o xa theo iterator PT O(logN)o xa theo kha: xa tt c cc phn t bng kha trong multisetPT: O(logN) + s phn t b xa.

    - clear : xa tt c set. PT O(n).- swap : i 2 set cho nhau. PT O(n).

    Operations:- find : tr v itarator tr n phn t cn tm kim. Nu khng tm

    thy itarator tr v end ca set. PT O(logN). D trong multiset cnhiu phn t bng kha th n cng ch iterator n mt phn t.

    - lower_bound : tr v iterator n v tr phn t b nht m khng bhn (ln hn hoc bng) kha (d nhin l theo php so snh), nukhng tm thy tr v v tr end ca set. PT O(logN).

    - upper_bound: tr v iterator n v tr phn t b nht m ln hnkha, nu khng tm thy tr v v tr end ca set.. PT O(logN).

    - count : tr v s ln xut hin ca kha trong multiset. PT O(logN)+ s phn t tm c.

    Chng trnh Demo:

    #include #include using namespace std;main() {

    multiset s;multiset :: iterator it;int i;

    for (i=1;i

  • 7/23/2019 STL for Newbies

    16/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 16

    10.Map (nh x):- Map l mt loi associative container. Mi phn t ca map l s kt hp ca kha

    (key value) v nh x ca n (mapped value). Cng ging nh set, trong map khng

    cha cc kha mang gi tr ging nhau.- Trong map, cc kha c s dng xc nh gi tr cc phn t. Kiu ca kha vnh x c th khc nhau.

    - V cng ging nh set, cc phn t trong map c sp xp theo mt trnh t no theo cch so snh.

    - Map c ci t bng red-black tree (cy en) mt loi cy tm kim nh phnt cn bng. Mi phn t ca map li c ci t theo kiu pair (xem thm thvin utility).

    Khai bo:#include ...map // kiu d liu 1 l kha, kiu d liu 2 l gi tr ca kha.

    S dng class so snh:Dng 1:struct cmp{

    bool operator() (char a,char b) {return afirst; // ging nh (*it).firstit->second; // ging nh (*it).second

    Capacity:

    - size : tr v kch thc hin ti ca map. PT O(1)- empty : true nu map rng, v ngc li. PT O(1).

    Truy cp ti phn t:- operator [kha]: Nu kha c trong map, th hm ny s tr v gi

    tr m kha nh x n. Ngc li, nu kha cha c trong map, thkhi gi [] n s thm vo map kha . PT O(logN)

    Chnh sa- insert : Chn phn t vo map. Ch : phn t chn vo phi kiu

    pair. PT O(logN).- erase :

    o xa theo iterator PT O(logN)

    o xa theo kha: xa kha trong map. PT: O(logN).- clear : xa tt c set. PT O(n).

  • 7/23/2019 STL for Newbies

    17/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 17

    - swap : i 2 set cho nhau. PT O(n).

    Operations:- find : tr v itarator tr n phn t cn tm kim. Nu khng tm

    thy iterator tr v end ca map. PT O(logN).- lower_bound : tr v iterator n v tr phn t b nht m khng b

    hn (ln hn hoc bng) kha (d nhin l theo php so snh), nukhng tm thy tr v v tr end ca map. PT O(logN).- upper_bound: tr v iterator n v tr phn t b nht m ln hn

    kha, nu khng tm thy tr v v tr end ca map. PT O(logN).- count : tr v s ln xut hin ca kha trong multiset. PT O(logN)

    Chng trnh demo:

    #include #include #include using namespace std;

    main() {map m;map :: iterator it;

    m['a']=1; // m={{'a',1}}m.insert(make_pair('b',2)); // m={{'a',1};{'b',2}}m.insert(pair('c',3) ); // m={{'a',1};{'b',2};{'c',3}}

    cout

  • 7/23/2019 STL for Newbies

    18/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 18

    III. STL ALGORITHMS (TH VIN THUT TON):- Khai bo s dng:#include - Cc hm trong STL Algorithm kh nhiu nn mnh ch gii thiu s qua v mt s

    hm hay s dng trong cc bi ton.- C mt lu nh cho cc bn l khi s dng cc hm m thc hin trong mt onphn t lin tip no th cc hm trong c++ thung c tc dng trn na on [..).V d nh: bn mun hm f c tc dng trong on t 1n th cc bn phi gi hmtrong on t 1 n+1.

    1. Min, max:1.1. min: tr v gi tr b hn theo php so snh (mc nh l php ton less):V d: min(a,b) s return a;

    min(3,1) s return 1;

    1.2. max th ngc li vi hm min:V d: max(a,b) s return b

    max(3,1) s return 1.

    1.3. next_permutation: hon v tip theo. Hm ny s return 1 nu c hon vtip theo, 0 nu khng c hon v tip theo.

    V d:// next_permutation#include #include using namespace std;

    int main () {int myints[] = {1,2,3};

    cout

  • 7/23/2019 STL for Newbies

    19/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 19

    2. Sp xp:- sort: sp xp on phn t theo mt trnh t no . Mc nh ca sort l s dng

    operator

  • 7/23/2019 STL for Newbies

    20/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 20

    // binary_search example#include #include #include using namespace std;

    bool myfunction (int i,int j) { return (i

  • 7/23/2019 STL for Newbies

    21/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 21

    sort (v.begin(), v.end()); // 10 10 10 20 20 20 30 30

    low=lower_bound (v.begin(), v.end(), 20); // ^up= upper_bound (v.begin(), v.end(), 20); // ^

    cout

  • 7/23/2019 STL for Newbies

    22/22

    STL for newbies iu Xun Mnh D10CN6 PTIT 22

    o swap (string_cn_i): i gi tr 2 xu cho nhau.- String operations:

    o c_str : chuyn xu t dng string trong C++ sang string trong C.o substr (pos,length): return string c trch ra t v tr th pos, v trch ra

    length k t.