Vector là một template class và chỉ tồn tại trong C++, trong khi mảng (array) là cấu trúc tích hợp sẵn của ngôn ngữ, có cả trong C và C++.
Vector được triển khai như mảng động với giao diện danh sách (list interface), trong khi mảng có thể triển khai tĩnh hoặc động với giao diện kiểu dữ liệu nguyên thủy.
Khác biệt giữa Vector và Array
- Vector là mảng động, kích thước có thể tăng/giảm; mảng có kích thước cố định.
- Vector có thể dự trữ không gian (reserve); mảng không thể.
- Vector là một class; mảng là một kiểu dữ liệu (datatype).
- Vector có thể lưu trữ bất kỳ loại đối tượng nào; mảng chỉ lưu giá trị đồng nhất (homogeneous).
Ưu điểm của Array
- Hỗ trợ truy cập ngẫu nhiên (random access) hiệu quả.
- Dễ dàng sắp xếp.
- Phù hợp hơn cho lưu trữ số lượng phần tử cố định.
Nhược điểm của Array
- Không thể xóa phần tử.
- Không thể tạo mảng động (trong C chuẩn, C++ có new[]).
- Không thể lưu nhiều kiểu dữ liệu khác nhau.
Ưu điểm của Vector
- Kích thước có thể thay đổi linh hoạt (push_back, pop_back, resize).
- Có thể lưu nhiều loại đối tượng (thông qua template).
- Có thể xóa phần tử (erase, clear).
- Tự động quản lý bộ nhớ.
- Cung cấp nhiều hàm thành viên hữu ích (size, capacity, at, front, back...).
Nhược điểm của Vector
- Vector là đối tượng, tiêu tốn bộ nhớ nhiều hơn mảng gốc do overhead quản lý.
- Truy cập chậm hơn mảng một chút do kiểm tra biên (bounds checking) ở hàm at().
- Reallocation (cấp phát lại bộ nhớ) có thể tốn chi phí khi push_back nhiều lần.
Khi nào dùng gì?
- Dùng array: Kích thước cố định, hiệu năng cực đại, nhúng/hệ thống.
- Dùng vector: Kích thước thay đổi, phát triển ứng dụng chung, an toàn hơn.