Mảng (array) trong C++

Ở 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ử.

Vậy mảng trong C++ là gì? Chúng ta sẽ cùng tìm hiểu trong nội dung sau đây nhé.

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:

Cú pháp
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:

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 

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:

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.

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:

 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:

Ví dụ
#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:

Ví dụ
#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:

Ví dụ
#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:

Cú pháp
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:

Cú pháp
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:

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:

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:

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:

Ví dụ
#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é.

Vậy chúng ta kết thúc bài học này ở đây. Bài học tiếp theo chúng ta sẽ cùng tìm hiểu về mảng được sử dụng như là tham số của hàm. Các bạn nhớ theo dõi nhé.

Khóa học nên xem

Nguồn: freetuts.net