[Buổi 30][Template & ngoại lệ][WS] Bài 1: Generic Safe Stack


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

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

  1. template<class T> class SafeStack dùng vector<T>.
  2. push(x), pop(), top(), size().
  3. pop/top rỗng ném runtime_error.
  4. Đọ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

There are no comments at the moment.

Zalo