40 lines
2.9 KiB
Markdown
40 lines
2.9 KiB
Markdown
参考资料:
|
||
- <https://zh.wikipedia.org/zh-hans/%E7%BA%A2%E9%BB%91%E6%A0%91>([镜像](https://cloud.zymsite.ink/f/Wx4hJ/%E7%BA%A2%E9%BB%91%E6%A0%91%20-%20%E7%BB%B4%E5%9F%BA%E7%99%BE%E7%A7%91%EF%BC%8C%E8%87%AA%E7%94%B1%E7%9A%84%E7%99%BE%E7%A7%91%E5%85%A8%E4%B9%A6%20%282024_3_26%2016_16_20%29.html))
|
||
- <https://oi-wiki.org/ds/rbtree/>([备份](https://cloud.zymsite.ink/f/EWeto/%E7%BA%A2%E9%BB%91%E6%A0%91%20-%20OI%20Wiki%20%282024_3_26%2016_14_29%29.html))
|
||
|
||
___
|
||
|
||
## 作业要求
|
||
|
||
- 这次大作业要求实现与 C++ 标准库类似的数据结构 map,包括迭代器等。框架接口在已本仓库中给出,只需要实现`.hpp`文件内所要求的内容即可。
|
||
- B班实现可以 AVL 树、AA 树、红黑树三选一,A 班实现红黑树。
|
||
- 你需要完成下发文件中的作业代码,在 OJ 上面提交`map.hpp`,要求可以实现 map 的基本操作,并且具有一定的鲁棒性。
|
||
- Bonus: 在测试数据中有一些`type_traits`的测试,感兴趣可以尝试。具体的工作以及计分方法尚未确定,后续可能会有更新。
|
||
- 在本作业中,只允许使用`cstdio`,`cstring`,`iostream`,`cmath`,`string`五个 C++ 标准库,如需使用其他功能请自行实现。
|
||
- 我们会检查内存泄漏,如果还不会测内存泄漏,可以看教程[如何检测内存泄漏?](./tutorials/detect-memory-leak/detect-memory-leak.md)
|
||
|
||
## 下发文件
|
||
|
||
- `data directory`: 测试源码和正确输出
|
||
- `map.hpp`: 提供接口,完成`TODO`部分代码,请不要随意改动接口,否则会导致测评代码不能正确调用你的文件。
|
||
- `exception.hpp` `utility.hpp`: 保证测试在本地正确运行的相关代码,请不要随意改动。
|
||
- 最终 OJ 测试仅仅需`map.hpp`。
|
||
|
||
## 实现细节
|
||
|
||
**可能需要注意的细节:**
|
||
|
||
- 在测试点中,有一些类并不具有默认构造函数,所以直接使用`T* p=new T[...];`可能会出现问题。
|
||
- 你的程序将会受到一定程度的鲁棒性检测
|
||
|
||
## 分数构成
|
||
|
||
- **总得分** = 80%(OJ 测试部分) + 20%(code review)=80%(OJ 测试部分) + 16% (基础问题) + 4% (Bonus)
|
||
- **注意事项:**
|
||
1. 使用普通的二叉搜索树完成此题,最终得分为:0.4\*以上得分
|
||
2. 使用非二叉搜索树、以及要求的算法外的方法完成此题,最终得分为:0.7\*以上得分
|
||
- **关于 Bonus:** 可以是对容器或者迭代器的某个行为的优化,type_traits 相关应用或其他有创意的想法,在 code review 时展示即可(本部分后续会有更新,可能涉及具体工作的改变)
|
||
- **学术诚信问题**:如果在 CR 时,发现有任何违规行为(包括但不限于使用其它头文件、使用非常规方法通过测试点),你最终的得分都有可能为 0 分。
|
||
## 截止日期
|
||
|
||
作业时间为三周,即 ddl 设在第八周周日上机课之前(4月14号 18:30),大家合理安排时间完成~ |