You are on page 1of 8

BTL C++

- Container Library : cấu trúc dữ liệu được sử dụng để lưu trữ các đối
tượng hoặc giá trị. Các container trong STL được chia thành ba loại
chính:
1. CONTAINER SEQUENCE
Sequence container là tập hợp các container class nó duy trì trật tự của
các phần tử bên trong container. Một đặc tính của Sequence container là bạn có
thể chọn ví trí muốn chèn thêm phần tử vào container. Một ví dụ điển hình là
khi các bạn thêm một phần tử vào mảng một chiều, các phần tử còn lại vẫn giữ
nguyên thứ tự của chúng như trước khi chèn.
Sequence containers gồm: std::vector, std::array, std::list, std::deque…
a. Std::vector
Là một loại sequence container trong C++, được sử dụng để lưu trữ các
phần tử liên tiếp trong bộ nhớ và cho phép thêm hoặc xóa các phần tử khi cần
thiết.
Các đặc tính của std::vector gồm:
- Các vectơ sử dụng một mảng được cấp phát động để lưu trữ các phần tử của
chúng. Mảng này có thể cần được phân bổ lại để tăng kích thước khi các
phần tử mới được chèn vào.
- Truy cập ngẫu nhiên: vector hỗ trợ việc truy cập ngẫu nhiên các phần tử
trong container thông qua chỉ số của chúng.
- Iterator: vector hỗ trợ iterator, là một công cụ quan trọng để duyệt và thao
tác các phần tử trong container.
- Khả năng chèn và xóa phần tử: vectơ truy cập các phần tử của nó rất hiệu
quả (giống như mảng) so với các bộ chứa khác và việc thêm hoặc xóa các
phần tử từ phần cuối của nó tương đối hiệu quả. Đối với các hoạt động liên
quan đến việc chèn hoặc xóa các phần tử ở các vị trí khác với vị trí cuối,
chúng hoạt động kém hơn các hoạt động khác và có các trình vòng lặp và
tham chiếu ít nhất quán hơn so với list.

b. Std::array
Là một sequence container trong C++, tương tự như mảng (array),
với kích thước cố định được xác định tại thời điểm biên dịch.
Các đặc điểm của std::array:
- Kích thước cố định, không thể thay đổi sau khi đã khai báo.
- Truy cập ngẫu nhiên: hỗ trợ bằng chỉ số các phần tử.
- Iterator: hỗ trợ iterator để duyệt và thao tác các phần tử trong container.
- Tối ưu hóa bộ nhớ: lưu trữ các phần tử liên tiếp trong bộ nhớ, tối ưu hóa
hiệu suất và quản lý bộ nhớ của chương trình.
c. Std::list
Là các sequence container cho phép thao tác chèn và xóa thời gian
liên tục ở bất kỳ đâu trong trình tự và lặp lại theo cả hai hướng được sử dụng
để lưu trữ các phần tử dưới dạng danh sách liên kết kép (double linked list).
Đặc điểm của std::list:
- Có thể phân bổ động vùng nhớ cho các phần tử, do đó có thể mở rộng hoặc
thu hẹp list khi cần thiết.
- Cho phép truy cập ngẫu nhiên vào các phần tử, nhưng vì phải đi qua các liên
kết để đến phần tử mong muốn, nên hiệu suất truy xuất ngẫu nhiên thấp hơn
so với mảng.
- Không yêu cầu bộ nhớ liên tục như mảng, cho phép chèn và xóa nhanh.
- Iterator: không cho phép truy cập thông qua con trỏ như mảng.
d. Std::deque
Std::deque (Double-Ended Queue) được sử dụng để lưu trữ các phần tử
dưới dạng hàng đợi kép (double-ended queue). Nó cho phép chèn và xóa phần
tử ở cả hai đầu với hiệu suất tuyến tính.
Đặc điểm của std::deque
- Cho phép chèn và xóa phần tử ở cả hai đầu với hiệu suất tuyến tính.
- Truy xuất ngẫu nhiên hiệu quả, tương tự như mảng.
- Đòi hỏi ít bộ nhớ hơn so với std::vector, do không yêu cầu liên tục nên có
thể mở rộng hoặc thu hẹp deque khi cần thiết.
- Iterrator: không hỗ trợ truy xuất thông qua con trỏ.
2. CONTAINER ADAPTOR
Container adapter là các container được sử dụng cho các cấu trúc lưu trữ
đặc biệt: std::stack, std::queue, ...
a. Std::stack
Stack: được triển khai dưới dạng container adaptors, là các lớp sử dụng
một đối tượng được đóng gói của một lớp bộ chứa cụ thể làm underlying
container của nó, được sử dụng để lưu trữ các phần tử theo cấu trúc ngăn xếp
(stack). Nó cho phép chèn và xóa phần tử ở đỉnh ngăn xếp với hiệu suất tuyến
tính.
Đặc điểm của std::stack
- Lưu trữ các phần tử theo cấu trúc ngăn xếp: phần tử cuối cùng được chèn
vào ngăn xếp sẽ được lấy ra đầu tiên (LIFO: Last In First Out).
- Chỉ cho phép truy cập vào phần tử ở đỉnh ngăn xếp.
- Cho phép chèn và xóa phần tử ở đỉnh ngăn xếp với hiệu suất tuyến tính.
- Không hỗ trợ truy xuất thông qua chỉ số, con trỏ hoặc iterator.
Ví dụ ứng dụng cách tổ chức lưu trữ của cấu trúc dữ liệu Stack để
chuyển đổi một số từ hệ thập phân sang hệ nhị phân. Cấu trúc Stack còn nhiều
ứng dụng thực tế như tạo ra chuỗi trạng thái cho phép người dùng trở lại phía
trước đó (undo).

b. Std::queue
Queue được triển khai dưới dạng container adaptors, ược sử dụng để lưu
trữ các phần tử theo cấu trúc hàng đợi (queue). Nó cho phép chèn phần tử vào
cuối hàng đợi và xóa phần tử ở đầu hàng đợi với hiệu suất tuyến tính.
Đặc điểm của std::queue
- Lưu trữ các phần tử theo cấu trúc hàng đợi: phần tử đầu tiên được chèn vào
hàng đợi sẽ được lấy ra đầu tiên (FIFO: First In First Out).
- Chỉ cho phép truy cập vào phần tử ở đầu và cuối hàng đợi.
- Cho phép chèn phần tử cuối hàng đợi và xóa phần tử ở đầu hàng đợi vớ hiệu
suất tuyến tính.
- Không hỗ trợ truy xuất thông qua con trỏ hoặc iterator.

Tham khảo:
https://cplusplus.com/reference/stl/
http://vncoding.net/thu-vien-stl-c/
https://cpp.daynhauhoc.com/11/1-stl-containers/

You might also like