Download as pdf or txt
Download as pdf or txt
You are on page 1of 15

Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH

http://www.fotech.org/forum/index.php?showtopic=36882 1/15
FOTECH Hc hnh - Thi c - Tr ao i chuy n mn Lp t r nh C/C++
[Tut] C++ STL part I
Started By ngheo_gia_truy en , Jan 1 5 201 3 02:1 1 PM
C++ STL,
ngheo_gia_truyen
Cho cc bn,
Hm nay mnh s gii thiu vi cc bn mt "b cng c" rt mnh m v hu ch ca C++ vi tn "Standard Template
Library" hay "Th vin mu chun".
c bi ny lm g ??
- Hc (xong) mn nhng mn nh C++ c bn, CTDLvGT, OOP v bn khng bit nn lm g tip theo cho chn.
- Cn thit cho nhng bn mun lm Dev C++ hoc k c nhng bn khng lm Dev.
- bit, chi, chm gi .....
Yu cu trc khi c :
- Hiu mt cht v Template (search Google hoc qua c y (http://www.fotech.org/forum/index.php?
showtopic=36547) ).).
- C kin thc c bn v OOP (Lp trnh hng i tng).
- Cht t kin thc v DSA (Datastruct and Algorithm) - Cu trc d liu v gii thut.
- Kin thc c bn v C++.
Bi vit ca mnh thc cht l mt bi "dch" v a s kin thc mnh u ly t cun "The C++ Standard Library, The:
A Tutorial and Reference". Cc bn nn c cun ny thay v bi vit ca mnh v n gin l bi vit ny s s si hn
nhiu so vi mt cun sch + c hi rn luyn thm Ting Anh
V STL l mt th vin ln nn mnh ch trnh by mt cch ht sc tng qut v n km theo mt vi v d nh cc
bn thy c s hu dng ca STL trong lp trnh C++. Bi vit kh di nn c l mnh s chia lm 3 phn vi cu trc
:
- Phn I : Gii thiu v STL v gii thiu cc Container.
- Phn II : Cc Algorithm thng dng trong STL.
- Phn III : M rng hn mt cht v C++ Standard Library v ng dng ca STL, hay rng hn l C++ SL trong gii
mt s bi ton n gin.
Cng vi bi vit ny mnh cng vit thm 2 bi nh v Function Object v Iterator (cng box C++) c th i su
hn.
Bi vit cng kh di nn mnh khng vit c lin mch, c thiu st g mong cc bn b sung thm v kin mnh
sa cha cho hon thin hn.
PART I : Gii thiu v STL v cc thnh phn chnh.
Ni dung chnh :
- M u v STL cng cc thnh phn.
- Gii thiu mt s container trong STL.
- Gii thiu mt s Algorithm thng dng trong STL.
- Cht t vn khi s dng STL.
I. STL l g?? - Tc dng ca n ra sao??
Gi lc 1 5 Jan 2 01 3 - 02 :1 1 PM
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 2/15
1. STL l g??
- L "tri tim" ca th vin C++ chun.
- L mt b th vin vi nhiu lp c thit k theo tng "lp trnh tng qut" nn STL c xy dng bng cc
hm, lp ... template.
- STL l "th vin mu chun" ca C++ c xy dng t nm 1979 bi Alexander Stepanov theo tng "lp trnh
tng qut". Trc vo nm 1971 David Musser c tng v xy dng mt phn nh nhng n cha tr thnh
mt b cng c hon chnh.
Ti nay (phin bn C11) STL vn tip tc c pht trin vi nhiu hng khc nhau nh : ti u m; m rng, thm
vo nhng cu trc, gii thut cha c; thay th, loi b i nhng cu trc, gii thut khng cn thit.
- Nhiu ngi coi STL l mt th vin m rng ca C++ v n khng c xy dng ngay t lc C++ ra i m c xy
dng sau khi tng lp trnh tng qut ra i. Tuy nhin STL c xy dng da trn nn tng ngn ng C++ v a
vic lp trnh ln mc tru tng cao hn.
- Vi nhng chng trnh nh th STL c th c coi nh 1 framework cho vic xy dng cu trc d liu v gii thut.
2. Tc dng ca n ra sao??
Tc dng chnh ca STL l tnh tru tng cao, an ton v d s dng.
- Tnh tru tng cao ca STL : l tnh cht cho php ta s dng cc lp, cc hm, cc gii thut, cc cu trc d liu
ca n m khng cn quan tm nhng th c xy dng nh th no, ch quan tm ti "giao din vi ngi dng" -
dng nh th no, khi s dng th ta nhn c g.... hay ni theo hng lp trnh l "ta cn truyn vo nhng g v ta s
nhn c g" >> cc cu trc, gii thut ca STL c coi nh nhng hp en.
- An ton : Tnh an ton ca STL c m bo v STL c thit k "rt tt", pht trin, sa li qua cc phin bn (hin
ti l C11). V c thit k tt v c ti u code bi nhiu lp trnh vin nn STL "chy nhanh" nh code C++ do
chng ta vit, hn na gim s lng li i.
- D s dng : V tnh tru tng cao v tng qut dn ti vic STL hot ng vi nhiu kiu d liu khc nhau, giao din
vi ngi s dng (lp trnh vin) ca STL n gin v d hiu dn ti vic s dng d dng hn.
3. V d u tin :
Mnh a ra mt v d nh cc bn d hnh dung hn vic STL hot ng th no v tc dng ca n ra sao.
- Gi s bn mun to ra mt t in cho ring mnh, bn mun xy dng nn mt cu trc lu tr v thao tc vi
cc t trong t in .
tng u tin ca bn c th l to ra mt mng lu tr cc t (i tng) trn, bn bt u vi vic to ra mng
. Sau a d liu l mt b cc t bn mun c trong t in ca mnh.
Sau bn li mun nng cp mng thnh mt lp qun l v s dng d dng hn nhng bn phi x l kh nhiu
vn nh :
- Bn mun m rng t in ca mnh ln vi/chc ngn t.
- Xy dng cch thc tm, xem, xa, sa mt hoc nhiu t.
.....
Nhng vic tiu tn ca bn kh nhiu thi gian cho vic vit v c bit l sa v ti u code ca mnh.!!
STL cung cp cho bn nhiu cu trc d liu v cc gii thut khc nhau nh vector, map, set, deque, list .... bn la
chn v s dng sao cho ph hp vi yu cu ca mnh.
Tr li vi v d, ta c th s dng vector lu tr cc t .
Bn s gii quyt c cc vn nu trn :
- Vic m rng l t ng - tuy vy bn vn c th can thip vo khi cn thit trong trng hp vic m rng t ng
nhiu hn mc bn cn.
1 string tu_dien [100];tu_dien [0] = new string("Maria Ozawa");tu_dien [1] = new
string("Saori Hara");tu_dien [2] = new string("Hoang Thuy Linh");// ..........
1 vector <string> vector_tu_dien = new vector <string> ();vector_tu_dien.at(0) =
new string ("maria ozawa");// ...........
?
(#
)
?
(#
)
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 3/15
- STL s cung cp cho ta hng lot gii thut cho vic thm, xa, sa, thay i nhng t trong cu trc vector bn lu
tr.
>> Bn khng cn quan tm ti vic vit code cho nhng thao tc ra sao. Bn s khng tn thi gian cho vic vit,
sa code. Hn na code ca STL c thit k v ti u tt nn chng trnh ca bn s "chy nhanh" v t li. (Tt
nhin c th code ca bn ti u hn code trong STL)
Tm li :
- STL l mt th vin c thit k v xy dng gip bn c mt ci nhn vi tnh tru tng cao v chng trnh.
- S dng STL gip cho bn d dng hn trong vic lp trnh theo thit k nh trc, vic sa i code cng d dng
hn v bn nhn chng trnh ca mnh trong mt mc tng qut hn, b i cc chi tit vn vt ca chng trnh.
** 90% chng trnh s dng (tiu tn) 10% thi gian v 10% chng trnh s dng (tiu tn) 90% thi gian, v vy bn
nn tp trung cho nhng phn "tri tim" ca chng trnh.
II. Cu trc ca STL.
STL l mt b gm 3 thnh phn chnh : Containers, Iterators, Algorithms. Trong 2 thnh phn to nn chng
trnh l Algorithm v Container, phn cn li Iterator gip Algorithm tng tc vi cc Container.
1. Container.
Container hay hiu theo ngha gn tng t l cc Cu trc d liu.
- Container c s dng qun l mt tp cc i tng thuc mt kiu xc nh v d nh : mt b sch, mt tp nh,
mt tp a DVD ... ni cch khc container l mt tp hp trong cc phn t c chung mt kiu d liu. (Mnh dng
t tp - tp hp - cu trc d liu vi ngha kh tng ng nhau cho d hiu).
- STL a ra nhiu container gip bn la chn v s dng ph hp vi mc ch ca mnh nh vector, deque, list, set,
muiltiset, map, multimap ...
- Bn c th s dng cc thut ton c cung cp bi cc container hoc s dng cc thut ton tng qut lm vic
vi cc container. Ty vo trng hp hoc nhu cu.
V d :
Bn to nn mt t in vi mt container - map. Khi bn c th :
- Thay th (sa) mt t trong t in.
- Xa, thm mt t trong t in.
- Tm kim (thng dng nht) mt t trong t in.
Nhng thao tc trn c th thc hin bng vic gi cc phng thc ca t in (map) hoc s
dng cc phng thc bn ngoi. Vic cng ging nh bn c mt quyn t in in t. Bn s
dng 1 trong 2 cch sau tm kim t.
+ Bn c th tm kim trn quyn t in bng vic nhp vo cc t. T in in t s t tra cu
v tr li kt qu cho bn.
+ Bn c th a ra t cn tm kim v giao cho "mt thng no ". Vi thng ny th vic tm trn
mt cun t in thng v t in in t l ging nhau. Bn s khng cn quan tm xem vic
"thng " nhn quyn t in ca bn ra sao m ch quan tm ti kt qu "n" tr v cho bn.
2. Iterator
2.1 : Iterator l g?
Iterator hay dch tm l "b duyt" c s dng "duyt" mt cu trc d liu hay mt tp con ca cu trc d liu.
Bn c th tng tng mt iterator nh mt con tr chy trong mt cu trc d liu, duyt ln lt hay cch on cc
phn t ca cu trc . V hu ht (tt c) cu trc d liu trong STL bao gm c cc iterator ca n nn ta c th s
dng mt iterator duyt n mt cch n gin.
- Iterator thng dng trong cc thut ton thao tc vi cc phn t ca mt tp hp hay thao tc vi mt on
con/ton tp hp .
Tr li vi v d t in.
Khi bn mun tm mt t trong t in bn c th :
- Duyt c t in tm ra t .
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 4/15
- Duyt mt phn t in m bn bit nu t c th n phi nm trong on (tm t "Maria Ozawa" phi nm trong
tp cc t bt u bng ch "M").
>> Bn cn s dng iterator duyt cun t in ca mnh vi mt thut ton tm kim no ca cu trc bn dng
(nu n cung cp) hoc s dng mt thut ton "chung" do STL cung cp (hoc vit mt thut ton ca ring mnh
duyt).
2.2 : S dng ra sao??
Nu ta coi iterator nh nhng con tr th ta c th s dng cc ton t sau :
- Ton t tng "++" v gim "--" : Ta s dng duyt ti phn t tip theo hoc phn t trc trong mt tp hp.
- Ton t "*" : tr li phn t v tr m iterator ang "tr" vo. Nu phn t c cc thnh phn d liu hay phng
thc ta c th s dng ton t "->" tham chiu ti. V d nh *(iterator)->method();
- Ton t "==" v "!=" : Tr li gi tr boolean khi so snh 2 iterator c tr cng vo mt v tr hay khng.
- Ton t "=" : gn cho iterator ti mt v tr xc nh trong tp.
Hai iterator thng xuyn s dng nht khi ta duyt mt tp hp l begin() v end().
- container.begin() : "tr" vo phn t u tin ca mt container.
- container.end() : "tr" vo phn t sau phn t cui cng ca 1 tp -> v vy container.end() khng thuc container
, phn t ny khng xc nh nn khng th tham chiu ti n (phn t o).
Cng vi iterator trn cn c 2 iterator thng c s dng l rbegin() v rend().
- container.rbegin() : "tr" vo phn t cui cng ca container.
- container.rend() : "tr" vo phn t trc phn t u tin ca 1 tp -> v vy container.rend() khng thuc container
.
hiu thm v Iterator cc bn c th c trong bi [Tut] C++ Iterator hoc search thm trn internet.
3. Algorithm.
Algorithm hay "Gii thut", "Thut ton". (Mnh s dng 2 t ny vi ngha tng t nhau).
STL cung cp rt nhiu gii thut khc nhau cho php chng ta x l cc phn t trong mt container (hoc mt tp
con ca container).
V d :
Vi t in trn bn cn thm, xa, sa, tm kim, sp xp cc t, bn cn cc thut ton thc hin vic . Vi suy
ngh thng thng khi khng s dng STL bn s t mnh vit mt thut ton thc hin cc thao tc . Nhng STL
cung cp cho bn kh y cc thut ton khc nhau bn thc hin c cc yu cu trn.
Algorithm s dng Iterator v vy Algorithm c vit vi mt thut ton tng qut x l vi nhiu Container khc
nhau. Vic ny c th thc hin c n gin v hu ht (tt c) cc Container trong STL u a ra mt "giao din"
Iterator ging nhau. Algorithm khng cn quan tm Container l loi no m ch cn quan tm ti vic Container
c bao gm Iterator cho Algorithm s dng hay khng.
Mt vn nh na cn ni qua :
V d vi cu trc d liu List ta c mt phng thc list.sort() ca n trong khi li c mt thut ton sort() do STL
cung cp.
Bn s thy c mt cht khng hp l v ti sao Container bao gm c cc algorithm ca chnh bn thn n m li
cn cn ti cc Algorithm khc thc hin nhng cng vic lm g.??
Vn chnh y l cc cu trc d liu s khng c nhng phng thc ging nhau, nh vi list c ci t theo cu
trc danh sch lin kt 2 chiu : khi khi to cu trc cc phn t c th cha c sp xp nhng vi set li c ci
t theo cu trc cy tm kim nh phn t cn bng nn cc phn t c sp xp theo mt trt t nht nh, v vy
vic sp xp vi set l khng cn thit. >> Khng phi container no cng bao gm tt c cc phng thc y ht nhau.
1 vector <int> ivector (10);// .....vector <int>::iterator it = ivector.begin();
// To mt iterator "tr" vo phn t u tin ca mt vector int.
?
(#
)
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 5/15
Algorithm hot ng trn cc Container vi mt cch thc nh nhau, v d nh duyt tng phn t
mt, m khng cn quan tm ti Container c cu trc nh th no nn ta c mt ci nhn tng
qut hn v thut ton khi chng hot ng trn nhiu kiu d liu khc nhau. (T tng ch o
ca lp trnh tng qut).
Tm li :
- Cu trc d liu + Gii thut to nn chng trnh.
- Iterator cho php Gii thut tng tc vi cc Cu trc d liu theo mt giao din chung.
III. Mt s Container thng dng v cc thao tc vi chng.
Trong phn ny mnh s gii thiu mt s vn sau y :
- Phn loi container v tm hiu v mt s Container.
- Phn tch cc ng dng ca Container s dng chng ph hp vi mc ch.
- Mt s lu nh khi s dng Container.
1. Phn loi Containers.
Vic phn loi cc Container cng kh n gin v ta da vo cu trc d liu xy dng nn Container.
1.1 : Sequence containers - Ordered collections.
Sequence containers hay Ordered collections (Cu trc tun t) l mt tp hp cc phn t c v tr xc nh. V tr ca
phn t ph thuc vo thi gian v ni phn t c thm vo. N khng ph thuc vo gi tr ca phn t (tr khi ta
sp xp li container theo mt tiu chun nh trc).
V d nh bn xy dng mt t in bng mt sequence container v bn c mt tp hp cc t thm vo t in, v
tr ca cc t trong t in s ph thuc vo vic bn mun t n vo u trong cu trc v thi gian bn thm t vo.
Gi s bn thm tng t mt vo cui t in th v tr cc t trong cu trc d liu s ln lt l cc v tr tip theo t v
tr cui tr i v khng ph thuc vo vic t c ngha g.
Cc Sequence containers : vector, deque, list, string (ging nh mt vector vi cc phn t kiu char) v mng thng
thng. STL khng bao gm mng thng thng v y l mt kiu d liu c bn ca C++, n khng phi l class v s
khng bao gm cc phng thc.
1.2 : Associative containers - Sorted collections.
Associative containers hay Sorted collections (Cu trc lin kt) l mt tp hp cc phn t m v tr thc t ca cc
phn t ph thuc vo gi tr ca n. Gi tr ny li c xc nh thng qua mt tiu chun sp xp nh trc.
V d bn to ra mt t in bng mt associative container v thm vo t in mt s t mi. V tr thc s ca nhng
t s ph thuc vo gi tr (ngha) ca t.
Cc Associative containers : set, multiset, map, muiltimap. Cc container ny thng c ci t vi cu trc cy tm
kim nh phn t cn bng m bn (hc ICT) thy trong mn Cu trc d liu v Gii thut.
2. Include, Namespace, Khai bo v mt s lu .
Vic include cc container rt n gin. Chng ta ch cn thm dng sau vo u chng trnh :
Kiu ca container v cc "tn ring" c nh ngha trong 1 namespace tn l std. Chng ta s s dng std
namespace cho tt c cc v d.
1 #include <container_headers>// V d#include <vector>#include <list>#include
<deque>.....
1 using namespace std;
?
(#
)
?
(#
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 6/15
khai bo mt container ta s dng cu trc nh sau
Vi hu ht cc container u c mt (mt vi) hm to khc m i lc chng ta c th dng ti, v d nh :
3. Vector.
- Vector l container c s dng rt nhiu trong cc bi ton thng thng v cc bi ton ta thng s dng mt
cu trc d liu c s ca C++ -- mng.
- Vector thc cht lm mt mng ng c STL cung cp gip ta qun l d liu mt cch d dng hn vi cc phng
thc ca n.
- Vector gn nh m mt mng ng nn thi gian truy cp ti cc phn t l nh nhau, khng ph thuc vo v tr phn
t.
- Ngoi phn t v tr cui cng vic chn v xa s nhanh hn. Chn, xa vo cc v tr khc tn thm thi gian cho
vic dch chuyn cc phn t trong vector.
- Vector ging nh mt mng ng mt chiu nn ch c th chn thm phn t vo "cui" mng.
- V vector l mt container c dng nhiu nn mnh s ni k hn cc container khc.
3.1 : Khi to.
Vector bao gm cc hm khi to sau y :
3.2 : Cc phng thc thnh vin.
Di y l mt v d v mt s phng thc ca vector v cch s dng chng.
Spoiler Show
Insert v Remove.
Ngoi cc phng thc nh trn vector cng cung cp thm mt s phng thc chn v xa phn t nh :
1 container <type> name;// V d vector <int> ivector;vector < vector <int> >
ivvector; // Lu du cch gia hai k t ">" v "<" // v trnh bin dch s
bo li khi n hiu nhm ">>" "<<" l cc ton t nhp xut.// Nn vit r rng
v c du cch gia cc k t "<" v ">".
1 vector <int> ivector (10); // To mt vector kiu int vi 10 phn t.// Lu l
cu lnh trn khc vi cu lnh sau vector <int> ivector [10]; // To mt mng
cc vector, mi vector trong mng l rng.// Copy constuctorvector <int> i2vector
(ivector); // Sao chp cc phn t ca ivector vo i2vector,// Gi ti cc hm
to sao chp ca kiu m vector cha. // y l gi ti hm to sao chp
int(xxx).
1 vector <Elem> c; // Khi to mc nh - to ra vector khng c phn t no.vector
<int> c;vector <Elem> c1(c2); // Khi to sao chp - sao chp tt c cc phn t
ca vector c2 sang c1. (c1 v c2 phi cng kiu Elem).vector <string> c1(c2); //
vi c2 l vetor <string>vector <Elem> c(n); // Khi to vector vi n phn t - mi
phn t c to bi hm khi to mc nh.vector <hocSinh> c(100); // vi hocSinh
l mt lp.vector <Elem> c(n, Elem); // Khi to vector vi n phn t Elem - mi
phn t l mt bn sao chp.vector <string> c3(10, "Hoang Thuy Linh");vector <Elem>
c(begin, end); // Khi to vector vi cc phn t trong na on [begin, end) vi
begin, end l 2 iterator.vector <string> c4(c3.begin(), --c3.end());
1 c.insert (pos, elem); // Chn phn t elem (bn copy) vo v tr pos.c.insert
(pos, n, elem); // Chn n phn t elem vo v tr pos.c.insert (pos, begin, end);
// Chn cc phn t t begin ti end ca mt vector vo v tr pos.c.erase (pos);
// Xa phn t v tr pos.c.erase (begin, end); // Xa cc phn t trong na
on [begin, end).c.clear (); // Xa tt c cc phn t trong vector.
?
(#
)
?
(#
)
?
(#
)
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 7/15
Vic xa v thm phn t vo cui vector s nhanh hn cc v tr khc v khi thm hay xa phn t vo cc v tr khc
ta s phi dch chuyn cc phn t t sau v tr ti cui vector. Vic ny tiu tn thm thi gian.
3.3 : So snh cc vector.
Vector cung cp cc ton t "==, !=, >, <, >=, <=" cho vic so snh gia cc vector.
- "==" : Kim tra tt c cc phn t trong vector v gi ton t "==" cho cc phn t . Hai vector bng nhau khi tt c
cc phn t bng nhau, tt c cc thuc tnh ca vector bng nhau (size, ..).
- "!=" : Mt phn t hoc thuc tnh khc nhau s tr v True.
- ">, <" : Gi cc ton t cho ln lt tng phn t v cc thuc tnh nh size ...trong vector.
- "<=, >=" : Suy ra t cc trng hp trn.
3.4 : Mt s ch khi s dng vector.
a. Phn bit gia s phn t c s dng v s phn t c th s dng.
vector.size() l s lng phn t (thc s) ang c s dng.
vector.capacity() l s lng phn t c th cp pht.
b. T ng cp pht b nh.
Vector nh mt mng ng nn chng ta khng cn phi lo lng v vn thiu b nh khi s dng (tr khi my tnh
ht b nh heap). Nhng vic cng ny sinh ra mt vn khc - tha b nh.
Vector khng cp pht b nh cho tng phn t mi ln m n cp pht theo lng b nh 2*(b nh ang c) + 1. V
th vn xut hin mi khi vector y v n cp pht mi. V d nh ta ch cn b nh cho 5 phn t nhng sau khi
thm vo phn t th 5 th vector cp pht b nh cho 8 phn t.
>> Ta c th gii quyt vn bng phng thc resize().
Ht sc lu : Sau khi resize() m ta gi ti phng thc push_back(), khi cc phn t s c thm vo v tr k t
v tr cui cng tr i.
c. S dng kiu bt k.
Kiu <Elem> c th l kiu c bn ca C++ hoc kiu do ngi dng t nh ngha.
V d :
Lu y cc phn t trong vector phi c mt s hm khi to nh : hm khi to mc nh, hm khi to copy. V
trong cc php ton vi vector khng s dng tham chiu th cc hm khi to s c gi.
Cc kiu c bn ca C++ h tr cc hm khi to , cn nu bn s dng vector qun l cc i tng do mnh to
ra th bn phi vit cc hm khi to cho i tng.
i vi hm khi to copy th bn nn s dng deep-copy mc d vic l khng bt buc. Nhng trnh li logic
khi cc i tng s dng cng mt vng nh th vic ny gn nh "bt buc".
d. Chn thm nhiu phn t vo vector.
Ta chn thm mt phn t vo vector th cc phn t tip theo s c dch chuyn sang phi 1 n v. V th nu ta c
k hoch chn thm nhiu phn t vo mt vector th vic gi nhiu ln insert() s mt thi gian.
Cch tt hn chn thm nhiu phn t l gi 1 ln insert() thay v nhiu ln.
Xt v d sau y :
1 vector <string> tu_dien;// ...................tu_dien.resize(10000);//
...................tu_dien.push_back("Rika Aiuchi");// Nu ta push_back() th cc
phn t mi s c thm vo vector t v tr 10.000 tr i// K c trong trng
hp cc v tr trc 10.000 l trng.
1 vector<int> c1;vector<string> c2;vector<hocSinh> c3;vector< vector<int> > matrix;
// Ma trn 2 chiu. (ch du du cch - space gia cc k t <, >).// Ta c th
to mt matrix 2 chiu vi tt c cc phn t mang gi tr 0vector< vector<int> >
matrix (10, vector<int> (10, 0));
1 vector <int> v1;vector <int> v2;//.............// Dch cc phn t t v tr s 3
trong vector v1 sang phi v chn thm cc phn t ca vector v2 vo .// Cch
1.for (vector <int>::reverse_iterator it = v2.rbegin(); it != v2.rend(); ++it)
{ v1.insert(2, it);}// Cch 2.v1.insert(2, all(v2));// Hm all(v2) s tng
?
(#
)
?
(#
)
?
(#
)
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 8/15
3.5 : Vector Boolean.
a. S khc bit ca vector bool.
Vector boolean - vector <bool> s s dng 1 byte cho mi phn t ca n thay v 1 bit (gi tr bool). Vn ny l do
trong C++ gi tr a ch nh nht l 1 byte ch khng phi bit.
Vic chuyn i gia gi tr bool (1 bit) v gi tr phn t bool (1byte) ca vector s "tiu tn thi gian".
Vn ny nh hng ti vic duyt vector<bool> bng iterator. Khi vector<bool>::iterator s khng phi l
iterator truy cp ngu nhin nh cc iterator ca vector kiu khc. Duyt vector<bool> s "tn thi gian" hn so vi
duyt vector thng thng do vic chuyn i ni trn.
b. Mt s phng thc dng cho vector bool.
3.6 : Exception Handling vi Vector.
Vector bao gm mt s phng thc m bo vic kim tra li logic.
- at(), push_back() s throw ra cc exception nh v d nh bad_alloc.
- insert() s thnh cng hoc khng to ra thay i g trn vector gi n.
- erase(), clear(), insert() s khng throw exception nu cc copy constructor ca phn t khng throw exception.
>> Nn s dng at() thay v s dng cch truy cp ti cc phn t ca vector bng ton t "[]" v at() s throw ra
exception nu ta truy cp ti cc phn t nm ngoi phm vi truy cp ca vector.
4. Deque.
Deque ging nh mt mng ng hai chiu thay v mt chiu nh vector v vy ta c th chn v ly ra cc phn t
"u" ca deque.
4.1. : Mt s c tnh ca deque so vi vector.
- Xa v chn cc phn t vo u v cui ca deque l nhanh nht (so vi vector ch c phn t cui) v ta phi dch
chuyn cc phn t tip theo sang phi hoc tri. Cc v tr khc thi gian nh nhau.
- Deque s dng cu trc gm cc block thay v cp pht b nh theo kiu 2*old_cap + 1 nh vector. Vn dn ti
vic duyt deque bng iterator lu hn mt cht so vi vector.
- Deque cp pht bi nhiu block thay v 1 block nh vector nn n c th "cha" c nhiu phn t hn vector.
- Iterator phi l smart poiter thay v poiter thng thng bi vic nhy gia cc block trong cu trc ca vector.
- V h thng ca bn c gii hn cho mi block (gi s vi trm kB) nn c th mt phn t (i tng ln) s dng
nhiu hn 1 block ca deque.
- Block s c xa b khi n khng c s dng ti nn b nh cp pht cho deque s nh li.
4.2 : Cc phng thc.
Cc phng thc khi to, gn, so snh, chn, xa ca deque ging vi vector, ngoi ra deque thm vo 2 phng thc
cho vic chn v xa "u" ca mng.
ng vi vic duyt ln lt cc phn t ca v2.
1 c.flip(); // o ngc "du" - gi tr ca tt c cc phn t trong vector
bool.c[idex].flip(); // o ngc gi tr ca phn t v tr idex.c[idex] =
value; // Gn gi tr value cho phn t v tr idex - y l qu trnh chuyn
i t gi tr 1 bit sang byte.c[idex1] = c[idex2]; // Gn gi tr phn t v
tr idex2 cho idex1.// V d :c.front().flip(); // o ngc gi tr phn t u
tin trong vector.c.at(1) = c.font(); // Gn gi tr phn t u cho phn t 2.
?
(#
)
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 9/15
Deque khng c cc phng thc cho vic x l capacity nh capacity(), reserve().
Hai phng thc ny + cc phng thc ging vector s to ra exception nu n khng chnh xc.
5. List.
List c cu trc l mt danh sch lin kt hai chiu.
5.1 : c tnh ca List.
- List khng cho php ta truy cp ngu nhin ti mt phn t trong n. V d nh mun truy cp ti phn t th 5 ta
phi i theo th t ln lt t phn t u tin (hoc cui cng) ca list.
- Vic chn hay xa phn t u v cui ca list nhanh hn nhiu ln so vi vic chn v xa phn t cc v tr khc.
- List h tr exception handling theo cch : phng thc c hon thnh hoc khng c tc ng g ln list trong
trng hp n khng hon thnh.
- Cc phn t trong list c cp pht b nh trn cc vng nh ring r nhau, khc vi vector c cp pht mt vng
nh lin tip.
5.2 : Cc phng thc.
- V list khng cho php truy cp trc tip ti mt phn t (random access) nn n khng c phng thc at().
- Khng bao gm cc phng thc nh capacity() ... Mi phn t c mt vng nh ring (khng lin tip) v vy vic
cp pht hay xa b vng nh ch thc hin trn vng nh ca tng phn t.
- Cc phng thc khi to, so snh, gn, chn ging nh vector.
Cc phng thc khc ca list :
6. Set v Multiset.
Set v Multiset l cu trc m trong cc phn t ca n c sp xp theo mt tiu chun xc nh.
im khc bit gia Set v Multiset l Set khng cho php c 2 phn t cng gi tr trong khi Multiset th cho php
iu .
6.1 : Cc c tnh ca Set v Multiset.
- Ging nh cc associative container khc, set v multiset c ci t vi cu trc d liu cy nh phn t cn bng.
- Khng cho php tham chiu trc tip ti phn t m phi xut pht t gc (root) tm ti phn t . V vy thi gian
tham chiu ti cc i tng l khc nhau, khng ging nh vector c thi gian tham chiu ti cc i tng l nh
nhau.
- Cc php chn, xa, thay th cc phn t ca n c thc hin bng cc gii thut vi cy nh phn t cn bng. (Cc
gii thut u kh n gin v c th search vi google).
- T gc s dng iterator ta nhn set v multiset khng c g khc bit vi cc cu trc gii thiu pha trn. Ngha l
ta coi set, multiset nh mt mng d liu v vic duyt cc phn t ging nh vic dch chuyn con tr trn mng.
- Set v Multiset c sp xp vi mt tiu chun sp xp xc nh. Khi thm, xa, sa cc phn t th chng t ng
c sp xp theo tiu chun trn. (Mnh s s dng thm t "cch sp xp" cho d hiu hn).
- V Set v Multiset c sp xp nn tt c cc phn t trong n phi cho php so snh bng tiu chun sp xp trn. V
d kiu int cho php so snh vi ton t "<". Nu kiu ca cc phn t l kiu ngi dng nh ngha (struct, class ...)
1 c.push_front(elm); // Chn thm phn t vo u mng.c.pop_front(); // Ly ra
phn t u mng.
1 c.unique(); // Xa cc phn t trng lp.c.unique(op); // Xa cc phn t op trng
lp.c1.splice(pos,c2); // Chuyn cc phn t t c2 ti v tr pos ca
c1.c1.splice(pos,c2,c2pos); // Chuyn cc phn t t v tr c2pos ca c2 ti v tr
pos ca c1.c1.splice(pos,c2,c2beg,c2end); // Chuyn cc phn t trong na on
[c2beg,c2end) ca c2 ti v tr pos ca c1.c.sort(); // Sp xp list vi so snh
mc nh l "<".c.sort(op); // So snh list vi hm (function obj) op.c1.merge(c2);
// Sau khi c1 v c2 c sp xp, c1 v c2 s c kt hp thnh mt list mi (c
sp xp).
?
(#
)
Mudim v0.8 Tt VNI Telex Viqr Tng hp T ng Chnh t B du
kiu mi [ Bt/Tt (F9) n/Hin (F8) ]
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 10/15
th ta phi vit cc hm/phng thc cho php kiu c th so snh vi cch sp xp kia. V d vi class ta c th
vit cc operator cho php so snh hay cng c th vit mt hm so snh cc i tng ca class . (Pha di gi l
hm op - operator).
- u im ln nht ca set, multiset l tm kim v thi gian tm kim trn cy nh phn cn bng nh hn rt nhiu vic
tm kim trn cc cu trc d liu tun t.
** Thc t th set v multiset c ci t vi cu trc "cy - en".
6.2 : Khi to v cc phng thc.
a. Hm khi to.
Ngoi cc hm khi to mc nh, hm khi to sao chp, hm hy ging nh vi cc container trn th set v multiset
c thm cc hm khi to nh sau.
Mc nh th set v multiset s dng ton t "<" cho vic so snh cc phn t trong tp vi nhau.
b. Phng thc.
Ngoi cc phng thc so snh, size(), max_size(), empty() nh vi vector th set, multiset cn c thm cc phng
thc khc nh :
6.3 : Iterator v Exception Handling.
a. Iterator.
- Iterator ca set, multiset cng nh ca cc associative container khc thuc loi bidirectional iterator, do khng
h tr vic tham chiu trc tip ti mt phn t ca tp. V do set, multiset khng c cc phng thc nh at() hay
ton t "[]".
- Cc iterator ca set, multiset ging nh vi cc container khc : begin(), end(), rbegin(), rend().
b. Exception Handling.
- Chn thm phn t s thc hin c hoc nu khng th n khng tc ng g ti tp.
- Copy hay gn cc phn t c th s throw exception nu cc hm copy, gn ca bn thn phn t throw exception.
V d nh swap c th s throw exception.
6.4 : V d v vic thay i tiu chun so snh trong runtime.
V d ny mnh ly trong sch v n hu ch bn thy c s mm do ca STL trong vic t chc mt cu trc d
liu.
Thng thng bn s nh trc mt tiu chun sp xp ngay khi khi to ra mt set. Nhng i khi bn cn nhiu cch
sp xp khc nhau cho cc phn t trong tp . V d sau cho php ta thay i cc cch sp xp khc nhau ngay trong
qu trnh chy chng trnh.
Spoiler Show
Trong v d trn ta s dng mt Funtion Object chuyn i gia cc cch sp xp khc nhau.
V Funtion Object cc bn s c gii thiu phn di.
1 // Khi to vi cch so snh op.// Ngha l vi mi phn t x c thm vo set
th hm op(x, y) vi y l cc phn t c trong set.set <Elem> c(op); // Khi
to set vi cch so snh op v cc phn t (bn copy) trong na on [begin,
end).set <Elem> c (begin, end, op); // Hoc c th khi to vi cch sp xp l
mt i s template set <Elem, Op> c;multiset <Elem, Op> c1;// V d :set <int,
greater<int> > iset; // To set kiu int vi cch sp xp l "ln hn".multiset
<int, less<int> > imset; // To multiset kiu int vi cch sp xp l "nh hn".
1 count (elem); // Tr v s phn t trong tp c gi tr elem.find (elem); // Tr
v v tr ca phn t u tin c gi tr elem hoc end() (iterator).lower_bound
(elem); // Tr v v tr phn t u tin >= elem. (Ni m elem c th chn
vo).upper_bound (elem); // Tr v v tr phn t cui cng > elem.equal_range
(elem); // Tr v v tr phn t u tin v cui cng (pair) trong on cc phn
t c gi tr == elem.// Phng thc ny p dng vi multiset.
?
(#
)
?
(#
)
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 11/15
7. Map v Multimap.
7.1 : Cc c tnh ca Map v Multimap.
- Map v Multimap l cu trc cho php ta qun l cc cp kha/gi tr. Cng ging nh set v multiset, map v
multimap c xy dng trn cu trc d liu cy cn bng vi mt tiu chun sp xp xc nh.
- Map, multimap khng cho php tham chiu trc tip ti i tng bng cch tham chiu ngu nhin v vy thi gian
tham chiu ti cc phn t khc nhau s khc nhau ty thuc vo v tr ca phn t trong cu trc cy.
- S khc nhau gia map v multimap l multimap cho php cc gi tr trng lp trong khi map th khng. S trng lp
y c hiu l s trng lp v kha ch khng phi s trng lp v gi tr ca cc phn t trong map.
- Ging nh set, map cng yu cu vic c th so snh gia cc phn t vi nhau (so snh cc kha) v map c sp
xp theo mt cch xc nh.
- Vic thay i phn t thc cht l xa b phn t c i v thm vo phn t mi. Nhng vi gc nhn t vic s
dng iterator th gi tr kha l khng thay i.
7.2 : Pair.
V map cho php qun l cc cp kha/gi tr nn trc ht mnh s ni qua v class pair.
a. Pair.
- Nh ci tn ca n, pair cho php ta gp hai i tng thnh mt cp, chng c th cng kiu hay khc kiu v coi cp
nh mt i tng mi.
- Pair l mt class trong C++ SL v th n bao gm cc phng thc tng tc vi 2 i tng trong cp. ng thi n
cng bao gm tt c nhng phng thc ca hai i tng trn.
- i tng u tin trong pair c tn l first, i tng th 2 l second.
- Pair c khi to bng cch s dng 2 i s template
b. So snh pair.
Thc cht vic so snh pair l vic so snh hai i tng trong n.
c. Phng thc make_pair().
- Phng thc make_pair thay cho vic ta gi hm khi to ca pair. Nhng ta khng cn nh trc kiu ca cc i
tng.
- Khi cn to mt pair m khng cn bin tham chiu ti pair ta nn s dng make_pair();
7.3 : Khi to v cc phng thc.
Khc mt cht vi set, ta s dng 2 cch khi to map, multimap nh sau.
1 // Pair nh ngha trong header <utility> nn ta cn #include header ny.pair
<int, string> p;pair <string, string> *q;// Khi hm khi to ca hai i s
template s c gi.// Tham chiu ti 2 i tng p.first.doSomething();q-
>second.doSomething();// V d khcpair <Anh, Em> love;pair <AOE, Code>
Coder;//........
1 // So snh bng.template <class T1, class T2>bool operator== (const pair<T1,T2>& x,
const pair<T1,T2>& y) { return x.first == y.first && x.second == y.second;}//
Hay so snh nh hn.template <class T1, class T2>bool operator< (const pair<T1,T2>&
x, const pair<T1,T2>& y) { return x.first < y.first || (!(y.first < x.first) &&
x.second < y.second);}// Tng t vi cc so snh khc.
1 pair <int, string> p = make_pair (1, "Ai Sayama");// Hay make_pair (10, 10).//
S thay cho vic gi pair<int, int> (10, 10);// Truyn vo hm.bool isLove(pair
<c, Ci>& p> { // ......}cout << isLove(make_pair(Anh, Em));
1 // Cch 1 :// Khc vi set ta khng xc nh kiu ca cc phn t.map c; // To
map khng c phn t no.map c(op); // To map s dng cch so snh op -- Gi hm
op(x,y) so snh cc phn t x, y trong map.map c1(c2); // Khi to c1 bng
cch copy cc phn t t container c2.map c(begin,end); // Khi to map bng cch
copy cc phn t trong na on [begin, end).map c(beg,end,op) ; // Khi to map
bng cch copy cc phn t trong na on [begin, end) s dng cch so snh op.//
Cch 2 : // Xc nh kiu ca ca kha/gi tr.map<Key,Elem> // To map c kiu
ca kha v gi tr l Key/Elem v // cch sp xp mc nh s
dng Predefined Function Objects less <> (ton t <).map<Key,Elem,Op> // To map
c kiu ca kha v gi tr l Key/Elem v // cch sp xp
?
(#
)
?
(#
)
?
(#
)
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 12/15
- Cn li cc phng thc nh size(), empty(), max_size(), cc phng thc so snh, count(), find(),
lower/upper_bound(), equal_range(), swap() v cc phng thc chn, xa cng cc iterator ca map u c tc
dng ging nh vi set. Ch c khc bit l map s dng kha ca cc phn t tng tc vi chng.
- Cc phng thc h tr exception handling cng ging vi set.
7.4 : V d v Map.
a. Tham chiu ti kha, gi tr v cc phng thc ca chng.
u tin mnh a ra mt v d nh cho vic s dng map.
b. S dng map nh mt t in.
y mnh s gii thiu s lc v cch to mt t in bng cch s dng map v tm kim trn n.
Spoiler Show
Vic sp xp map v thay i cch sp xp trong qu trnh chy cc bn c th tm cc v d trn internet hoc xem qua
phn set pha trn.
8. Cc Containers khc trong C++ Standard Library, xy dng container.
C++ SL khng ch bao gm cc container ca STL m n cn c mt s container khc nh string, stack, queue,
priority queue (container adapter), bitset.
Mnh s gii thiu qua cc container ny v n khng nm trong khun kh bi vit ca mnh.
8.1 : String.
Ngoi cc container gii thiu pha trn bn cng c th s dng std::string nh mt STL container.
String c coi nh mt lp bao ca mng cc k t (char) v vy cc phn t ca n l cc k t char. String gip cho
vic x l chui d dng hn i vi lp trnh vin khi n cung cp nhiu phng thc nh so snh, ct, ghp, tm kim
trn chui.
V string l mt lp thng xuyn c s dng nn mnh s gii thiu s lc trong phn II - m rng ca bi vit ny.
8.2 : Stack.
Stack l mt ngn xp cho php ta y d liu vo v ly d liu ra "u" ca n. Ngha l n s dng phng php
"a vo trc Ly ra trc" (FIFO - First In First Out).
Ba phng thc chnh ca stack l :
- push() : y d liu vo u ngn xp.
- pop() : Ly d liu t u ngn xp.
- top() : Tr v d liu u ngn xp (khng ly n ra).
s dng stack ta ch cn #include header nh ngha n <stack>, khi ta c th khi to, s dng cc phng thc
ca stack.
8.3 : Queue.
Khc bit mt cht vi stack, queue l mt hng i cho php ta y d liu vo mt u v ly d liu ra u kia. N
op.// Tng t vi multimap....
1 // Duyt map v tham chiu ti cc thuc tnh ca n.map<int, string> ismap;//
..............map<int, string>::iterator pos;for (pos = ismap.begin(); pos !=
ismap.end(); ++pos) { cout << "Th t : " << pos->first << "\t" << "tn : " <<
pos->second << endl; // y vic tham chiu ti hai i tng first v second
c thc hin bi iterator v // ta s dng iterator nh mt con tr. //
Cch tham chiu khc l (*pos).first, (*pos).second.}
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 13/15
s dng phng php "a vo trc Ly ra sau" (FILO). Khi thm phn t mi vo th cc phn t trong n dch
chuyn dn ti cui hng i.
Cc phng thc chnh ca Queue.
- push () : y d liu vo u hng i.
- pop () : Ly d liu cui (u kia) ca hng i.
- front () : Tr li d liu u hng i (khng ly n ra).
- back () : Tr li d liu cui hng i.
s dng queue ta #include <queue> vo u m ngun.
8.4 : Priority queue.
Priority queue hay hng i u tin ging nh mt hng i, ch khc l thay v ly ra phn t trong hng c sp xp
theo phng php FILO th vi hng i u tin cc phn t trong n c sp xp da vo u tin ca n. Ngha l
cc phn t sau khi c thm vo s c so snh vi cc phn t trong n v sp xp vo ng v tr.
Cc phng thc ging nh vi queue v ta cng cn thm #include <queue> vo u m ngun.
Khc bit l khi khi to, thay v s dng queue<Elem> th ta s dng priority_queue <Elem, op>.
8.5 : Bitset.
Trong phn vector trn mnh ni v vic s dng vector<bool>, bn c th thy s hn ch ca n. V th C++ SL c
thm mt cu trc d liu tng t l bitset. S dng bitset gip ta d dng hn vi cc cu trc "nh du". V d nh
bn to mt mng cc p n ng - sai cho bi tp trc nghim, bn s s dng bitset cho n mt cch hiu qu.
Cc phng thc :
- set () : "nh du" mt i tng.
- count () : m cc i tng c nh du.
Bn cn #include <bitset> s dng n.
8.6 : Xy dng cho mnh cc container.
c ti y bn t hi : "V sao ta khng t xy dng nn mt container cho mnh??". Bn hon ton c th xy dng
mt container cho mnh, ti u code, chia s n vi mi ngi.
Vy xy dng mt container bn cn nhng g cho n?
- Vn u tin l thit k ca container. Container ca bn c th s l mt cu trc d liu khc hoc bn c th to
wapper (bao gi) cho cc container sn c. V d nh vit mt container s dng cu trc hash table (bng bm) m
hin gi cha c thm vo STL.
- Container ca bn nn tng thch vi cc Algorithm sn c trong STL. V d nh nn thit k mt giao din Iterator
ging vi giao din Iterator ca cc container trong STL. Bn c th la chn mt loi iterator ph hp cho cu trc d
liu ca mnh (c thm phn Iterator pha trn). Hay thit k y cc phng thc khi to, so snh, hy v cc
phng thc cn thit khc vi cu trc d liu bn chn.
- Li khuyn khi thit k - v cng l mt "chun" trong Cng Ngh Phn Mm l : M cho pht trin v ng cho sa
i. Ngha l bn d dng m rng, thm vo cc phng thc, a thm cc tin ch cho container ca mnh nhng
ng nn thay i thit k, sa i qu nhiu. Thm na nn gi vng giao din ca container. V d bn thay i thut
ton cho mt phng thc nhng khng nn thay i gi tr tr v, i s hay tn ca phng thc. ( i su vo cc
chin lc thit k chng trnh bn c th xem thm sch v Design Patterns).
9. S dng Container ph hp.
9.1 . Mt s trng hp tiu biu.
Ti y bn bit cch s dng mt s container, hiu c 1 cht v tc dng ca n. Trong phn ny mnh s ni
mt cht v cc trng hp thc t bn s dng cc container mt cch ph hp nht cho bi ton/ chng trnh ca
mnh.
- Vector l container c s dng kh nhiu v ta thng lu tr d liu theo dng mng. Vector l container n gin
v rt d s dng.Vic thm, xa, sa, tm kim trn vector c tc trung bnh so vi cc container khc. X l d
liu trn vector thun li v mm do. Nu bn cn mt cu trc d liu vi vic thm hay ly ra cc phn t mi vo
cui th vector ph hp.
- Nu bn cn mt cu trc d liu c th thm vo v ly ra c hai chiu hoc mt cu trc "cha" c mt s lng
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 14/15
ln phn t th deque ph hp.
- Nu bn cn mt cu trc m vic thm bt phn t c hai chiu tht nhanh, vic chn, xa, sa thng xy ra vi
cc phn t gia v t s dng tm kim, cn "cha" s lng nhiu phn t c ln th list l la chn cho bn.
- List hoc cc associative container l la chn ph hp nu bn cn mt cu trc trong cc phn t c sp xp,
thm vo na vic xa hoc thm phn t mi c thc hin hon ton hoc khng tc ng g ln cu trc.
- Nu bn cn mt cu trc m vic tm kim nhanh l u tin hng u th cc associative container ph hp nht v
thi gian tm kim ca cc container ny ch l O(logN) thay v O(N) nh cc cu trc khc.
- Bn cn mt cu trc lu tr cc phn t theo cp kha/gi tr. Map, multimap l la chn. (ng dng u tin ngh
ti l T in).
- Bn cn mt mng lin kt, hy dng map.
9.2 : Bn thm.
- Vi a s cc chng trnh khng ch s dng 1 container m l s kt hp ca nhiu container khc nhau ta xy
dng ln cu trc cho mnh. Cc container c coi nh nhng vin gch gip bn xy dng ln ngi nh.
- Mt cu trc cha c trong STL l Hash Set, Hash Map, Hash Multi*** (mong l sm thm vo). Bn c th t xy
dng cho mnh hoc s dng cc cu trc d liu khc, nh Boost.org (y), STLport ....
- Function Object kh quan trng trong vic gii quyt bi ton. N c s dng nhiu trong cc Algorithm v cc
phng thc ca Container. Nhng do gii hn ca bi vit ny nn mnh gii thiu n trong mt bi vit khc.
(Cng box C++). Cc bn c th c thm v n.
Tng kt :
Trn y mnh gii thiu mt cch s lc v STL v mt s Container trong n. Sau y mnh xin tng kt li mt
cht :
- STL l mt th vin ca C++ nm trong th vin C++ SL ln c xy dng bng template v th n to ra mt mc
tru tng cao hn, t gip ch cho vic xy dng chng trnh mt cch an ton, linh hot, d dng hn.
- Bn nn hiu c im mnh v yu ca cc Container trong STL t c c la chn ph hp trong vic thit k
cu trc d liu cho chng trnh ca mnh. Cn c php hay cch thc s dng ca chng ch l th yu v ta c th d
dng v nhanh chng "tra cu" c.
- Tp cho mnh thi quen s dng STL, n s gip chng ta xy dng chng trnh trong tng lai. Mnh cha c c hi
"lm vic" vi C++ nn cng cha hiu r ht c ch li ca STL, nhng theo mnh th s dng STL gip ta gim bt
thi gian sa cha v d dng nng cp chng trnh ca mnh hn. (Mong cc n anh cho thm kin).
Ni dung chnh ca bi vit c mnh tham kho vi ngun ch yu l cun sch gii thiu u bi vit cng mt s bi
vit trong phn tut gii thut ca TopCoder. (Phn III)
Bn no mt cng c ti y th c cng im cho mnh ci v ang c gng post bi vt cu broke_the_rule. Nhn
n ng trn mnh m ght
Bi v it ny c chnh sa bi ngheo_gia_truyen: 1 5 Jan 201 3 - 02:1 9 PM
Hitamu
Vote ri nh

Gi lc 1 5 Jan 2 01 3 - 02 :3 1 PM
i_love_it
Quote
Vector boolean - v ector <bool> s s dng 1 by te cho mi phn t ca n thay v 1 bit (gi tr bool). Vn ny l do trong
C++ gi tr a ch nh nht l 1 by te ch khng phi bit.
Vic chuy n i gia gi tr bool (1 bit) v gi tr phn t bool (1 by te) ca v ector s "tiu tn thi gian".
Vn ny nh hng ti v ic duy t v ector<bool> bng iterator. Khi v ector<bool>::iterator s khng phi l iterator
truy cp ngu nhin nh cc iterator ca v ector kiu khc. Duy t v ector<bool> s "tn thi gian" hn so v i duy t v ector
thng thng do v ic chuy n i ni trn.
Ngc ri, kch c ca bool l 1 byte, vector<bool> c th optimize s dng 1 bit cho mi phn t, vic ny khin
Gi lc 1 6 Jan 2 01 3 - 1 2 :1 8 AM
Ngy 25 thng 4 nm 2014 [Tut] C++ STL part I - C/C++ - FOTECH
http://www.fotech.org/forum/index.php?showtopic=36882 15/15
Back to C/C++
FOTECH Hc hnh - Thi c - Tr ao i chuy n mn Lp t r nh C/C++
cho khng th s dng vector<bool> thay cho mt mng C ging nh cc loi vector khc.
Chng trnh sau s crash nu uncomment bin a (test vi VS 2010),
1 #include<iostream>#include<vector>template<class T>void print(T* a, int length) {
for(int i = 0; i < length; i++) { std::cout << *(a+i) << " "; } std::cout
<< std::endl;}int main() { std::vector<int> b(10, 5); print(&b[0], 10);
std::vector<double> c(10, 4); print(&c[0], 10); std::vector<float> d(10, 3);
print(&d[0], 10); std::vector<char> e(10, 'a'); print(&e[0], 10); bool f[] =
{true, true, true, false, false, false, false, true, true, true}; print(&f[0],
10); //std::vector<bool> a(10, true); //print(&a[0], 10); return 0;}

You might also like