Giả sử chúng ta muốn thiết kế Danh bạ điện thoại hỗ trợ các hoạt động sau -
-
get - Điều này sẽ cung cấp một số không được chỉ định cho bất kỳ ai.
-
kiểm tra - Điều này sẽ kiểm tra xem một số có sẵn hay không.
-
phát hành - Điều này sẽ tái chế hoặc giải phóng một số.
Sử dụng trình khởi tạo, chúng ta có thể khởi tạo n số đầu tiên
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Xác định một bộ s
-
Xác định một hàng đợi có sẵn
-
Trình khởi tạo sẽ lấy maxNumbers.
-
N:=maxNumbers
-
để khởi tạo i:=0, khi i
-
chèn tôi vào có sẵn
-
-
Định nghĩa một hàm get ()
-
nếu kích thước có sẵn bằng 0, thì -
-
trả về -1
-
-
x:=phần tử đầu tiên có sẵn
-
chèn x vào s
-
xóa phần tử khỏi có sẵn
-
trả lại x
-
Xác định một kiểm tra hàm (), điều này sẽ lấy số,
-
nếu số> =N hoặc số <0, thì -
-
trả về false
-
-
trả về số true không có trong s
-
Xác định một bản phát hành hàm (), điều này sẽ lấy số,
-
nếu kiểm tra (số), thì -
-
trở lại
-
-
x:=số
-
xóa x khỏi s
-
chèn x vào có sẵn
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; class PhoneDirectory { public: set<int< s; queue<int< available; int N; PhoneDirectory(int maxNumbers){ N = maxNumbers; for (int i = 0; i < N; i++) { available.push(i); } } int get(){ if (available.size() == 0) return -1; int x = available.front(); s.insert(x); available.pop(); return x; } bool check(int number){ if (number >= N || number < 0) return false; return s.find(number) == s.end(); } void release(int number){ if (check(number)) return; int x = number; s.erase(x); available.push(x); } }; main(){ PhoneDirectory ob(3); cout << (ob.get()) << endl; cout << (ob.get()) << endl; cout << (ob.check(2)) << endl; cout << (ob.get()) << endl; cout << (ob.check(2)) << endl; ob.release(2); cout << (ob.check(2)) << endl; }
Đầu vào
ob.get(); ob.get(); ob.check(2); ob.get(); ob.check(2); ob.release(2); ob.check(2);
Đầu ra
0 1 1 2 0 1