HM184 尾插尾删柜

HM184 尾插尾删柜

HM184 尾插尾删柜

来源: 第 184 集 模板-类模板案例-数组类封装(下)

难度: 普及-

时间限制: 1s

空间限制: 64MB

题目描述

在已经能安全构造、深拷贝、赋值、析构的 MyArray<T> 上,补齐对外接口:

  1. 尾插 pushBack(const T &value):若 mCapacity == mSize(已满)直接返回,不扩容;否则把值写到下标 mSize 处,再让 mSize 加一。
  2. 尾删 popBack():这是**逻辑删除**——不真正擦堆区内容,只让用户访问不到最后一个元素。若 mSize == 0 直接返回;否则 mSize 减一。容量不变。
  3. 下标 operator[](int index):返回 T &,这样 arr[0] = 100 才能当左值。返回真实堆区那个元素本身。
  4. getCapacity() / getSize():把私有的容量和大小读出来。

内置类型和自定义类型都要能用。Person 须有默认构造(new T[容量] 需要),再提供有参构造。打印人物时用 姓名年龄 两个公有成员。

先处理整数柜:按容量尾插若干整数(满员忽略),做 \(k\) 次尾删(空柜再删忽略),再做若干次下标赋值。然后处理人物柜:按容量尾插若干人,再做 \(k_2\) 次尾删。

输入格式

第一行两个整数 \(c, n\)(\(1 \le c \le 1000\),\(0 \le n \le 1000\))。

第二行 \(n\) 个整数,绝对值 \(\le 10^9\)。

第三行一个整数 \(k\)(\(0 \le k \le 2000\)),表示整数柜尾删次数。

第四行一个整数 \(u\)(\(0 \le u \le 1000\))。

接下来 \(u\) 行,每行两个整数 \(idx, val\):把整数柜 arr[idx] 赋成 \(val\)。保证 \(0 \le idx < \) 当前大小。

随后一行两个整数 \(p, m\)(\(1 \le p \le 1000\),\(0 \le m \le 1000\))。

接下来 \(m\) 行人物:不含空白的姓名和整数年龄。姓名长度 \(1\sim 20\),年龄为 \(1\sim 10^6\)。

最后一行一个整数 \(k_2\)(\(0 \le k_2 \le 2000\)),表示人物柜尾删次数。

输出格式

第一行:整数柜元素,空格分隔;大小为 \(0\) 则空行。

第二行:cap= 容量 size= 大小。

随后每人一行 姓名 年龄(按剩余顺序)。

最后一行:pcap= 容量 psize= 大小。

样例

输入 #1

5 5
0 1 2 3 4
1
1
0 100
10 5
Wukong 999
HanXin 20
Daji 30
ZhaoYun 25
Angela 27
0

输出 #1

100 1 2 3
cap=5 size=4
Wukong 999
HanXin 20
Daji 30
ZhaoYun 25
Angela 27
pcap=10 psize=5

输入 #2

2 4
1 2 3 4
3
0
2 1
Tom 1
1

输出 #2


cap=2 size=0
pcap=2 psize=0

说明

样例 1:尾插入 \(0\sim 4\) 后容量与大小都是 \(5\);尾删一次后容量仍为 \(5\)、大小为 \(4\),再把 \(0\) 号改成 \(100\)。人物柜容量 \(10\)、只插 \(5\) 人。样例 2:容量 \(2\) 只能留下 \(1,2\);尾删三次后为空(多删忽略);人物插入后再删光,只剩空柜。operator[] 必须返回引用,赋值才能写回堆区。

信息

ID
1183
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者