Ở các bài học trước chúng ta đã cùng tìm hiểu về biến được dùng để lưu trữ giá trị trong bộ nhớ. Giả sử chúng ta cần lưu trữ 1000 số nguyên trong bộ nhớ, thì chúng ta sẽ khai báo đúng 1000 tên biến khác nhau. Điều này rất là kinh khủng, chúng ta phải suy nghĩ làm sao cho 1000 tên biến phải có nghĩa, chương trình của chúng ta sẽ trở nên rất dài và nhìn rất lộn xộn.
Trong C++ hổ trợ mảng giúp chúng ta giải quyết khó khăn trên, bây giờ chúng ta chỉ cần khai báo 1 mảng có 1000 phần tử.
1. Mảng trong C++
Cũng như các ngôn ngữ lập trình khác, mảng trong C++ là tập hợp các phần tử cùng kiểu liên tiếp nhau trong bộ nhớ.
Mảng trong C++ có độ dài cố định, được đánh theo chỉ số từ 0 đến độ dài mảng -1. Như hình dưới đây:
Ưu điểm và nhược điểm của mảng
Ưu điểm
- Truy xuất phần tử mảng ngẩu nhiên, dựa vào chỉ số (index) của mảng.
- Tối ưu code (chương trình chúng ta sẽ ít code hơn).
- Dễ dàng duyệt qua từng phần tử mảng.
- Dễ dàng thao tác dữ liệu.
- Dễ dàng sắp xếp dữ liệu.
Nhược điểm
- Mảng có độ dài cố định.
Trong C++ có 2 loại mảng đó là mảng một chiều và mảng nhiều chiều. Chúng ta cùng tìm hiểu từng loại một nhé
2. Mảng một chiều
Khai báo mảng
Để khai báo một mảng một chiều trong C++, chúng ta cần chỉ rõ kiểu dữ liệu của mảng, tên mảng và số lượng phần tử của mảng. Cú pháp khai báo mảng một chiều trong C++ như sau:
1
|
KieuDuLieu TenMang[KichCo]; |
Kích cở của mảng phải là một số nguyên lớn hơn 0, còn kiều dữ liệu có thể là bất cứ kiểu dữ liệu nào trong C++. Ví dụ chúng ta có mảng số nguyên gồm 1000 phần tử sẽ được khai báo như sau:
1
|
int Diem[1000]; |
Khởi tạo giá trị
Trong C++ cho phép chúng ta khởi tạo giá trị cho các phần tử mảng như sau:
int Diem[7] = {2, 9, 8, 9, 1, 10, 5};
Hoặc
1
|
int Diem[7] = {2, 9, 8}; |
Số phần tử ở giữa 2 dấu { và } không được lớn hơn số phần tử được khai báo trong dấu [].
Chúng ta cũng có thể khởi tạo giá trị cho mảng bằng cách bỏ qua kích cở của mảng như sau:
1
|
int Diem[] = {3, 5, 8, 9, 1, 5, 7, 3}; |
Chúng ta cũng có thể khởi tạo giá trị cho từng phần tử một trong mảng. Ví dụ chúng ta khởi tạo giá trị cho phần tử thứ 4.
1
2
|
int Diem[5]; //Khai bao mang so nguyen gom co 5 phan tu Diem[3]= 8; //Khoi tao gia tri cho phan tu thu 4 la 8 |
Bởi vì mảng có chỉ số (index) bắt đầu bằng 0 nên phần tử thứ 4 sẽ có chỉ số (index) là 3.
Truy xuất phần tử mảng
Chúng ta có thể truy xuất giá trị của bất kỳ phần tử nào trong mảng bằng cách gọi tên mảng và chỉ số (index). Cú pháp như sau:
TenMang[index]
Ví dụ ta có mảng Diem gồm 10 phần tử như sau:
1
|
int Diem[10] = {1, 3, 4, 5, 6, 1, 9, 4, 10, 5}; |
Chúng ta sẽ lấy giá trị của phần tử thứ 3, thứ 6, thứ 10 lần lượt như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include <iostream> using namespace std; int main() { int Diem[10] = {1, 3, 4, 5, 6, 1, 9, 4, 10, 5}; int a3 = Diem[2]; cout << "Phan tu thu 3 = " << a3 << endl; int a6 = Diem[6]; cout << "Phan tu thu 6 = " << a6 << endl; int a10 = Diem[9]; cout << "Phan tu thu 10 = " << a10 << endl; } |
Kết quả của chương trình trên là:
Chúng ta muốn truy xuất lần lượt tất cả các phần tử của mảng chúng ta có thể sử dụng vòng lặp trong c++ như while
, for
, do while
. Bắt đầu từ 0 đến kích cở mảng -1.
Ví dụ
Chúng ta cùng xem một ví dụ đơn giản về mảng một chiều trong C++ như sau:
1
2
3
4
5
6
7
8
9
10
11
|
#include <iostream> using namespace std; int main() { int arr[8] = {3, 5, 1, 3, 5, 6, 8, 12}; cout << "Danh sach cac phan tu cua mang arr nhu sau: " << endl; for ( int i = 0; i < 8; i++) { cout << " arr[" << i + 1 << "] = " << arr[i] << endl; } } |
Và kết quả sau khi thực thi đoạn code trên:
Chúng ta thử truy xuất phần tử ở ngoài phạm vi khai báo của mảng như sau:
1
2
3
4
5
6
7
8
9
10
|
#include <iostream> using namespace std; int main() { int Diem[10] = {1, 3, 4, 5, 6, 1, 9, 4, 10, 5}; int a11 = Diem[10]; cout << "Phan tu thu 11 = " << a11 << endl; int a = Diem[-5]; cout << "Phan tu thu -1 = " << a << endl; } |
Và kết quả sau khi thực thi đoạn code trên:
Như vậy trong C++ không có báo lỗi biên dịch khi truy xuất phần tử mảng ra khỏi phạm vi khai báo của mảng, tuy nhiên khi thực thi thì kết quả không như chúng ta mong đợi.
3. Mảng nhiều chiều
Cũng giống như mảng một chiều, mảng nhiều chiều cũng bao gồm nhiều phần tử, tuy nhiên mỗi phần tử là một mảng 1 chiều.
Cú pháp
Cú pháp của mảng nhiều chiều trong C++ như sau:
1
|
type name[size1][size2]...[sizeN]; |
Ví dụ chúng ta có mảng 4 chiều có các kích cở lần lượt là 3, 4, 2, 7 sẽ được khai báo như sau:
int ToaDo[3][4][2][7]
Trong bài học hôm nay chúng ta chỉ tìm hiểu mảng 2 chiều trong C++ thôi nhé. Mảng nhiều hơn 2 chiều thực tế rất ít sử dụng, các bạn có thể tìm hiểu thêm trên mạng nhé.
Mảng 2 chiều
Mảng 2 chiều là một hình thức đơn giản nhất của mảng nhiều chiều, bản chất của mảng 2 chiều là 2 mảng 1 chiều.
- Khai báo
Mảng 2 chiều trong C++ được khai báo theo cú pháp như sau:
1
|
KieuDuLieu TenMang[kichco1][kichco2]; |
Trong đó:
- KieuDuLieu: Là kiểu dữ liệu của phần tử trong mảng, kiểu dữ liệu có thể là một trong các kiểu dữ liệu được hổ trợ trong C++.
- TenMang: Là tên hợp lệ trong C++.
Giả sử chúng ta có mảng a có 3 dòng và 4 cột được minh họa như hình dưới đây:
- Khởi tạo giá trị
Giả sử chúng ta khỏi tạo giá trị cho mảng a có 3 dòng và 4 cột như sau:
1
2
3
4
5
|
int a[3][4] = { {0, 1, 2, 3} , {4, 5, 6, 7} , {8, 9, 10, 11} }; |
Hoặc chúng ta cũng có thể khởi tạo giá trị trên như sau:
1
|
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11}; |
- Truy xuất phần tử mảng
Trong C++, để truy xuất phần tử mảng thông qua chỉ số của dòng và chỉ số của cột như sau:
1
|
int test = a[2][3]; |
- Ví dụ
Chúng ta cùng xem xét một ví dụ đơn giản về mảng 2 chiều trong C++ như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <iostream> using namespace std; int main () { int a[3][2] = { {0,0}, {2,2}, {5,5}}; //khai bao va khoi tao gia tri cho mang a gom 3 dong va 2 cot cout << "Danh sach cac phan tu trong mang a nhu sau: " << endl; // Duyet qua tung phan tu cua mang a for ( int i = 0; i < 3; i++ ) { for ( int j = 0; j < 2; j++ ) { cout << " a[" << i << "][" << j << "] = " << a[i][j] << endl; } } return 0; } |
Và kết quả sau khi thực thi đoạn code trên như sau:
4. Kết luận
Như vậy là chúng ta đã tìm hiểu xong về mảng trong C++ rồi. Trong bài này chúng ta chỉ cần nhớ cách khai báo mảng, khởi tạo giá trị cho phần tử mảng và truy xuất phần tử mảng như thế nào. Vì mảng trong C++ rất thường xuyên được sử dụng, các bạn nhớ ghi nhớ nhé
Nguồn:https://freetuts.net