
77
Chơng 5. Mng và xâu kí t
Các kiu d liu cơ bn nh ã gii thiu trong Chơng 2 không biu
di+n các lo i d liu mà các bài toán òi h%i. Mt ví d là khi chơng trình cn
lu và x lý mt chui các phn t d liu cùng kiu, ch.ng h n nh danh sách
sinh viên trong trng hoc danh sách im thi ca mt sinh viên, có th s$p
xp, tìm kim, và tính toán các con s thng kê trên chui d liu ó. a s các
ngôn ng lp trình cung cp các kiu d liu có cu trúc phc v các nhim
v này, trong ó, mng là cu trúc d liu thông dng nht.
5.1. Mng mt chiu
Mng mt chiu là mt chui hu h n các phn t d liu thuc cùng mt kiu
d liu, t t i các ô nh liên tip trong b nh. Mi phn t trong mng có mt
ch# s khác nhau. Mng cho phép nh v và truy nhp n t&ng phn t bng
cách s dng ch# s ca phn t ó.
Ví d, im s cho 7 môn thi ca mt sinh viên có th "c lu tr trong mt
mng có kích thc bng 7 (ngh'a là có 7 ô nh) thay vì khai báo 7 bin khác
nhau cho im thi t&ng môn. Mng có th "c hình dung nh sau:
30 85 76 90 72 80 88
0 1 2 3 4 5 6
trong ó, mi ô biu di+n mt phn t ca mng – trong trng h"p này là mt
giá tr thuc kiu – và "c ánh s ln l"t t& 0 n 6.
C)ng nh mt bin bình thng, mng phi "c khai báo trc khi s dng.
Cú pháp khai báo mt mng trong C++ có d ng:
kiu_d_liu tên_mng Us_phn_tV;
trong ó, kiu_d_liu là mt kiu d liu h"p l (ch.ng h n , , ,
b…), tên_mng là mt nh danh h"p l, và s_phn_t (luôn t trong cp
ngoc vuông) quy nh s l"ng phn t mà mng cn cha.
Ví d, mng trong ví d trên "c khai báo nh sau:

78
UEV;
Lu ý: giá tr s phn t t trong cp ngoc vuông phi là mt hng s, do các
mng khai báo kiu này thuc b nh t'nh và phi có kích thc "c xác nh
trc khi chơng trình th!c thi. Mng vi kích thc ng s "c nói n
trong chơng sau.
Kt qu ca lnh khai báo nh trên là ta có 7 bin kiu vi "tên" ca chúng
là U1V, U1V, U>V, U3V, U<V, U,V, và
U6V.
Hình 5.1 minh ha vic khai báo và s dng mng mt chiu. Lu ý s! khác
nhau v ng ngh'a ca giá tr bên trong cp ngoc vuông: t i lnh khai báo
mng thì nó là kích thc mng, còn khi truy nhp phn t ca mng thì nó là
ch# s ca phn t mng.
5.1.1. Khi to mng
Khi khai báo mt mng, ta có th khi t o giá tr cho các phn t ca mng theo
cách sau:
UEV=61,E1,89,E,,88,3<,91 ;
Nu không "c khi t o, các phn t ca mng s có giá tr không xác nh
cho n khi ta gán cho chúng mt giá tr nào ó.
5.1.2. Trách nhim kim soát tính h$p l ca ch% s mng
i vi mng "c khai báo vi kích thc n, ch# s ca các phn t trong
mng ó là các s nguyên t& 0 n n–1. Ngoài ra, các giá tr khác u không
h"p l. Vic truy nhp mng bng các ch# s không h"p l, ch.ng h n khi truy
nhp n U-1V hay UV, có th dn n các thay ,i không mong
mun i vi d liu vùng b nh bên ngoài mng (có th thuc v các bin
khác). Trong nhiu ngôn ng lp trình, vic này "c kim soát t! ng
tránh trng h"p truy nhp vi ch# s không h"p l. Tuy nhiên, trong C++ vic
truy nhp n các phn t ca mng vi ch# s nh% hơn 0 hoc ln hơn n–1
không h ph m li cú pháp, vic truy nhp ra ngoài mng không gây li khi
dch nhng có th gây li khi ch y, lp trình viên có trách nhim kim soát các
giá tr ch# s mng tránh trng h"p này.

79
<>
";
0UTB.A5)UA@.@=E;
()
U0UTB.A5)UA@.@V;
=1;
(=1;<0UTB.A5)UA@.@;++)
<<"."<<<<"$";
>>UV;
=+UV;
<<"D6""<<0UTB.A5)UA@.@;
1;
.1$31
.1$8,
.>$E6
.3$91
.<$E>
.,$81
.6$88
6789:;8<:=89>?@<89A>9BCDCEFGB
Hình 5.1: Ví d v khai báo và s dng mng.
5.1.3. Mng làm tham s cho hàm
Có th dùng mng làm tham s cho hàm. Hình 5.2 là kt qu ca vic sa
chơng trình trong Hình 5.1, a hai nhim v nhp d liu cho mng và tính
im trung bình vào hai hàm và truyn mng vào trong hai hàm ó.
ý rng tuy các tham s mng không "c khai báo vi kí t! "&" trong phn
khai báo và nh ngh'a hàm, nhng th!c cht chúng là các tham chiu (thay vì
giá tr). Nói cách khác, khi chơng trình th!c thi, các hàm không t o các bn
sao riêng ca các mng "c truyn làm tham s (vic t o bn sao này có th có
chi phí rt cao v b nh.)

80
Vy làm th nào khi ta cn quy nh rng mt hàm không "c sa ,i mt
tham s mng nào ó? (ví d không nên cho hàm 6" quyn sa mng
.) Gii pháp mà C++ cung cp là t& khóa . Ta sa phn khai báo
tham s ca hàm 6" t&
6"(UV,z);
thành
6"(UV,z);
Kt qu là trình biên dch s không chp nhn các dòng lnh sa giá tr ca
tham s mng bên trong hàm 6". Nên s dng t& khóa
cho tt c các tham s mà hàm không có nhu cu thay ,i.

81
<>
";
0UTB.A5)UA@.@=E;
6@(UV,z)
(=1;<z;++)
<<"."<<<<"$";
>>UV;
6"(UV,z)
=1;
(=1;<z;++)
=+UV;
z;
()
U0UTB.A5)UA@.@V;
@(,0UTB.A5)UA@.@);
6"@=6"(,0UTB.A5)UA@.@);
<<"D6""<<6"@;
1;
Hình 5.2: Ví d v mng làm tham s ca hàm.
5.2. Mng nhiu chiu
Cu trúc mng có th có nhiu hơn mt chiu. Ví d, lu mt bàn c ca-rô,
ta có th dùng mt mng hai chiu cha các kí t!, kí t! '.' biu di+n mt ô trng
trên bàn c, các kí t! 'x' và 'o' ln l"t biu di+n các kí hiu trong trò chơi c ca
rô. Khai báo mng hai chiu nh sau: