Lớp vật chứa (Container) bao gồm nhiều lớp cơ bản của C++: lớp Vector, lớp danh sách (List) và các kiểu hàng đợi (Stack và Queue), lớp tập hợp (Set) và lớp ánh xạ (Map). Trong chương này sẽ trình bày một số lớp cơ bản của Container là: Set, Stack, Queue và List
7.1.1 Giao diện của lớp Container
Các lớp cơ bản của Container có một số tốn tử và phương thức có chức năng giống nhau, bao gồm:
• ==: Tốn tử so sánh bằng • <: Tốn tử so sánh nhỏ hơn
• begin(): Giá trị khởi đầu của con chạy iterator • end(): Giá trị kết thúc của con chạy iterator • size(): Số lượng phần tử đối tượng của vật chứa • empty(): Vật chứa là rỗng
• front(): Phần tử thứ nhất của vật chứa • back(): Phần tử cuối của vật chứa
• []: Toán tử truy nhập đến phần tử của vật chứa • insert(): Thêm vào vật chứa một (hoặc một số) phần tử • push_back(): Thêm một phần tử vào cuối vật chứa
• push_front(): Thêm một phần tử vào đầu vật chứa
• erase(): Loại bỏ một (hoặc một số) phần tử khỏi vật chứa • pop_back(): Loại bỏ phần tử cuối của vật chứa
• pop_front(): Loại bỏ phần tử đầu của vật chứa.
Ngoài ra, tuỳ vào các lớp cụ thể mà có một số tốn tử và phương thức đặc trưng của lớp đó. Các tốn tử và phương thức này sẽ được trình bày chi tiết trong nội dung từng lớp tiếp theo.
7.1.2 Con chạy Iterator
Iterator là một con trỏ trỏ đến các phần tử của vật chứa. Nó đóng vai trị là một con chạy cho phép người dùng di chuyển qua từng phần tử có mặt trong vật chứa. Mỗi phép tăng giảm một đơn vị của con chạy này tương ứng với một phép dịch đến phần tử tiếp theo hay phần tử trước của phần tử hiện tại mà con chạy đang trỏ tới.
Khai báo con chạy
Cú pháp chung để khai báo một biến con chạy iterator như sau:
Tên_lớp<T>::iterator Tên_con_chạy;
Trong đó:
• Tên lớp: là tên của lớp cơ bản ta đang dùng, ví dụ lớp Set, lớp List…
• T: là tên kiểu lớp của các phần tử chứa trong vật chứa. Kiểu có thể là các kiểu cơ bản
trong C++, cũng có thể là các kiểu phức tạp do người dùng tự định nghĩa. • Tên con chạy: là tên biến sẽ được sử dụng làm biến chạy trong vật chứa.
Ví dụ:
Set<int>::iterator iter;
là khai báo một biến con chạy iter cho lớp tập hợp (Set), trong đó, các phần tử của lớp vật chứa có kiểu cơ bản int. Hoặc:
List<Person>::iterator iter;
là khai báo một biến con chạy iter cho lớp danh sách (List), trong đó, các phần tử có kiểu lớp do người dùng tự định nghĩa là Person.
Sử dụng con chạy
Con chạy được sử dụng khi cần duyệt lần lượt các phần tử có mặt trong vật chứa. Ví dụ sau sẽ in ra các phần tử có kiểu int của một tập hợp:
Set<int> mySet; // Khai báo một đối tượng của lớp Set, // các phần tử có kiểu int
Set<int>::iterator i; // Khai báo con chạy của lớp Set, // các phần tử có kiểu int
… // Thêm phần tử vào for(i=mySet.begin(); i<mySet.end(); i++)
cout << mySet[i] << “ ”;
Lưu ý:
• Biến con chạy phải được khởi đầu bằng phương thức begin() và kết thúc bằng phương
thức end() của đối tượng cần duyệt tương ứng.
• Một con chạy có thể được sử dụng nhiều lần cho nhiều đối tượng nếu chúng có cùng kiểu lớp vật chứa và các phần tử của chúng cũng cùng kiểu.