Cấp Phát động Cho Mảng Hai Chiều Trong C++ - Nguyễn Tuấn's Blog
Có thể bạn quan tâm
Mảng 2 chiều khá quen thuộc với chúng ta. Mình sẽ giới thiệu một vài cách cấp phát động mảng 2 chiều để các bạn lựa chọn cho phù hợp. Ở đây mình minh họa bằng C++, đối với các ngôn ngữ khác thì ý tưởng cũng tương tự vậy thôi. Lưu ý là C++ sẽ không tự động thu hồi tài nguyên động đã cấp phát cho dù có thoát khỏi chương trình, vì thế bắt buộc phải có thao tác giải phóng mảng 2 chiều.
Cách 1: Dùng con trỏ cấp 2Ý tưởng: Để cấp phát động cho mảng 2 chiều, ta cấp phát bộ nhớ của từng chiều theo cú pháp của mảng một chiều. Tức là tạo m mảng 1 chiều, mỗi mảng có n phần tử.
Để làm điều này ta dùng 1 con trỏ cấp 2, cấp phát cho nó m con trỏ cấp 1, mỗi con trỏ cấp 1 ta lại cấp phát n phần tử.
Ví dụ:
int **a = new int*[m]; for(int i = 0; i<m; i++) a[i] = new int[n];Với ví dụ trên, ta được một mảng động hai chiều các số nguyên có kích thước m x n.
Lưu ý là ta dùng một con trỏ cấp 2 cấp phát cho một mảng các phần tử có kiểu int* chứ không phải kiểu int thông thường. Kiểu int* chính là con trỏ cấp 1.
Để giải phóng bộ nhớ động, ta cũng phải giải phóng theo từng cột và từng hàng.
Ví dụ:
for(int i = 0; i<m; i++) delete []a[i]; delete []a;Cách này phức tạp nhưng bạn sẽ có 1 mảng 2 chiều đúng nghĩa và có thể lấy phần tử bằng cách gọi a[i][j] thông thường như mảng tĩnh.
Cách 2: Dùng mảng 1 chiều để biểu diễn mảng 2 chiềuÝ tưởng: Cấp phát mảng 1 chiều có kích thước m x n và truy cập nó như một mảng 2 chiều với các chỉ số thông qua công thức liên hệ.
Phần tử a[i][j] tương ứng với phần tử a[i*n + j] trong mảng.
Ví dụ:
int *a = new int[m*n]; //cấp phát xong //khởi tạo bằng 0 for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) a[i*n+j] = 0;Việc giải phóng vô cùng đơn giản, chỉ cần 1 lệnh delete.
delete []a;Với cách này bạn sẽ phải truy cập mảng 2 chiều thông qua công thức liên hệ, tuy nhiên, cách này sẽ hữu ích với những trường hợp như cộng 2 ma trận cùng loại, v.v…
Từ khóa » Khởi Tạo Mảng 2 Chiều
-
Bài 54. Mảng 2 Chiều Trong C - Lập Trình Không Khó
-
5.3 Mảng Hai Chiều - Khóa Học C++
-
C Cơ Bản: Mảng 2 Chiều (Phần 1) - DevIOT
-
Mảng Hai Chiều Là Gì? Cách Khai Báo Và Khởi Tạo Trong C++
-
Mảng Hai Chiều - Mảng Đa Chiều Trong C++ - CodeLearn
-
Mảng 2 Chiều Trong C
-
Mảng 2 Chiều Trong C - Học Lập Trình C Online - Viettuts
-
Mảng 2 Chiều Trong C++ (Two-dimensional Arrays) | How Kteam
-
Các Thuật Toán Cơ Bản Về Mảng Hai Chiều - IViettech
-
[PDF] MẢNG 2 CHIỀU (2D Array)
-
Lập Trình C++ - Mảng 2 Chiều
-
Cách Khai Báo Mảng 2 Chiều Trong C, C++
-
[Lập Trình C++ Cơ Bản] Bài 7 (Phần 2): Mảng Hai Chiều Trong ... - Viblo