← Danh sách bài học
📊

Mảng

Mảng lưu nhiều phần tử cùng kiểu tại vùng nhớ liên tiếp. Truy cập O(1) qua chỉ số. C++ có mảng tĩnh (int a[100]) và vector động (STL).

1. Mảng 1 chiều

Khai báo: int a[5]; a[0] = 1; ... Truy cập từ 0 đến n-1. Vượt biên = undefined behavior.

2. Mảng 2 chiều (ma trận)

int m[3][4]; duyệt bằng 2 vòng lồng.

int m[3][3];
for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++)
        cin >> m[i][j];

3. vector — mảng động

vector<int> v; v.push_back(x); v.size(); v[i]; v.pop_back(); v.clear(); Ưu tiên vector hơn mảng thô.

💻 Code mẫu thực chiến

Thống kê điểm học sinh

Nhập điểm N học sinh, in điểm cao nhất, thấp nhất, trung bình.

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n; cin >> n;
    vector<double> d(n);
    double sum = 0, mx = 0, mn = 10;
    for (int i = 0; i < n; i++) {
        cin >> d[i];
        sum += d[i];
        if (d[i] > mx) mx = d[i];
        if (d[i] < mn) mn = d[i];
    }
    cout << "Max=" << mx << " Min=" << mn << " Avg=" << sum/n;
}

Nhân hai ma trận

Ứng dụng: đồ hoạ 3D, machine learning.

int A[2][3], B[3][2], C[2][2] = {0};
// nhập A, B ...
for (int i = 0; i < 2; i++)
    for (int j = 0; j < 2; j++)
        for (int k = 0; k < 3; k++)
            C[i][j] += A[i][k] * B[k][j];

💡 Mẹo & lưu ý

  • Kích thước mảng tĩnh phải là hằng số biết trước khi biên dịch.
  • Vector tự cấp phát và mở rộng — tránh dùng new/delete thủ công.
  • Duyệt ma trận theo hàng nhanh hơn theo cột (cache-friendly).