[Buổi 30][Template & ngoại lệ][WS] Bài 1: Generic Safe Stack
Generic Safe Stack
Bối cảnh
Xây một Stack<T> nhỏ dùng vector, có exception khi pop/top trên stack rỗng.
Workshop tích hợp class template và exception trong một use-case rõ.
Yêu cầu
template<class T> class SafeStackdùng vector<T>.- push(x), pop(), top(), size().
- pop/top rỗng ném runtime_error.
- Đọc type I/S và q command PUSH/POP/TOP/SIZE; lỗi in
ERROR.
Yêu cầu tổ chức code
Phải có class template và throw/catch cho empty stack.
Online Judge chấm output. Với bài nhạy về cấu trúc OOP, giảng viên review thêm source code để xác nhận học viên luyện đúng kỹ năng.
Input
Dòng 1 type q; type I hoặc S. Sau đó q command.
Output
Mỗi POP/TOP/SIZE một dòng; POP in phần tử bị lấy ra.
Ràng buộc
1≤q≤2000; string là token.
Ví dụ 1
Input
I 7
PUSH 1
PUSH 2
TOP
SIZE
POP
POP
POP
Output
2
2
2
1
ERROR
Giải thích
Stack int nhận1 rồi2, nên TOP trả2 và SIZE=2. POP đầu trả2, POP tiếp trả1. POP lần ba khi stack rỗng ném/báo lỗi theo contract và output ERROR. Chuỗi output chứng minh LIFO và safe empty handling.
Ví dụ này đồng thời kiểm tra cả nhánh thành công và tính ổn định khi có lỗi/generic state. Nếu validation fail, output lỗi phải xuất hiện mà dữ liệu hợp lệ trước đó vẫn được giữ. Nếu generic function được instantiate với type khác, cùng logic xử lý vẫn phải tạo kết quả tương ứng theo type đó.
Ví dụ 2
Input
S 6
PUSH a
PUSH b
TOP
POP
TOP
SIZE
Output
b
b
a
1
Giải thích
Stack string lần lượt chứa a,b. TOP là b; POP trả b và còn a; TOP tiếp theo là a, SIZE=1. Cùng class template nhưng type khác vẫn giữ đúng semantics LIFO.
Ví dụ này đồng thời kiểm tra cả nhánh thành công và tính ổn định khi có lỗi/generic state. Nếu validation fail, output lỗi phải xuất hiện mà dữ liệu hợp lệ trước đó vẫn được giữ. Nếu generic function được instantiate với type khác, cùng logic xử lý vẫn phải tạo kết quả tương ứng theo type đó.
Thông tin học tập
- Module: M08
- Buổi: B30
- Loại bài: WORKSHOP
- Độ khó: Medium
- Concepts: class template, exceptions, stack behavior, generic programming
- Giới hạn kiến thức: B01-B30
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments