final_project
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
final_project [2012/03/31 08:20] – [Q&A] xcyan | final_project [2012/04/06 02:49] (current) – [Origin of Project] xcyan | ||
---|---|---|---|
Line 1: | Line 1: | ||
==== Final Project(Bees) ===== | ==== Final Project(Bees) ===== | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | ==== Name of the Project: Bees ==== | + | ==== Name of Project: Bees ==== |
Line 13: | Line 13: | ||
| | ||
- | ==== Origin of the Project ==== | + | ==== Origin of Project ==== |
本次作业Xiao哥的初衷是用C++实现JAVA的STL,关于原本JAVA的STL,大家可以参见 | 本次作业Xiao哥的初衷是用C++实现JAVA的STL,关于原本JAVA的STL,大家可以参见 | ||
- | http:// | + | [[http:// |
但注意JAVA和C++有很大不同,所以只能说把JAVA中函数的功能在表面上实现了。就像英语中有些意思中文无法表达,中文的有些意思英文无法表达一样。所以请不要有“我实现了JAVA的STL”这种想法。我们这里注重的是数据结构的使用,STL只是一个包装而已。 | 但注意JAVA和C++有很大不同,所以只能说把JAVA中函数的功能在表面上实现了。就像英语中有些意思中文无法表达,中文的有些意思英文无法表达一样。所以请不要有“我实现了JAVA的STL”这种想法。我们这里注重的是数据结构的使用,STL只是一个包装而已。 | ||
- | |||
==== About Template Class ==== | ==== About Template Class ==== | ||
Line 55: | Line 54: | ||
==== What does " | ==== What does " | ||
- | 本次大作业的目的是让大家能熟练地掌握本学期所学的几种数据结构:队列、Hash表、平衡树,使用它们去实现在JAVA标准库中的一些集合类Set, | + | 本次大作业的目的是让大家能熟练地掌握本学期所学的几种数据结构:队列、Hash表、平衡树,使用它们去实现在JAVA标准库中的一些集合类Set, |
- | 关于原本JAVA的STL,大家可以参见[JAVA STL](http:// | + | - Arraylist |
+ | - Linkedlist | ||
+ | - Hashmap | ||
+ | - Hashset | ||
+ | - Treemap | ||
+ | - Treeset | ||
+ | |||
+ | 还有一个比较特殊的文件是utility,这个文件中包含了一些会用到的子类(两个异常类和map的entry),还有一些可能会对大家有帮助的方法,是由一个很萌的助教提供的。在这些库文件中,我们给出了每个类的“接口”(公共方法),而大家所要做的,就是去写出这些类的私有域,并给出这些类的是实现。每个库文件都给出了非常详尽的注释,包括了每个类用什么数据结构实现,每个方法的用途和细节,参考的时间复杂度。还有要注意的是,因为模板类的关系,必须把实现和库文件放在一起。关于原本JAVA的STL,大家可以参见[[http:// | ||
==== Contents of tutorial ==== | ==== Contents of tutorial ==== | ||
Line 70: | Line 76: | ||
综上,你先要知道你需要什么东西,并马上在私有域中去实现它,在实现的过程中再去发现你还需要什么东西,慢慢地这个类就完整了。 | 综上,你先要知道你需要什么东西,并马上在私有域中去实现它,在实现的过程中再去发现你还需要什么东西,慢慢地这个类就完整了。 | ||
- | ==== Something to clarify | + | ==== Must be clarified |
=== About Iterator === | === About Iterator === | ||
Line 88: | Line 94: | ||
if (index < 0 || index > length) | if (index < 0 || index > length) | ||
{ throw IndexOutOfBound(); | { throw IndexOutOfBound(); | ||
+ | } | ||
下面的代码有捕获异常的能力: | 下面的代码有捕获异常的能力: | ||
try | try | ||
Line 109: | Line 116: | ||
我们在模板构造函数里前加了个explicit,这样做的目的是防止出现自动类型转换(不加问题也不大)。 | 我们在模板构造函数里前加了个explicit,这样做的目的是防止出现自动类型转换(不加问题也不大)。 | ||
- | ==== Q&A ==== | + | ===== Q& |
- | - 问:为什么要把实现写放到库文件里去? | + | == 问:为什么要把实现写放到库文件里去 |
- | | + | 答:模板类的编译过程和普通类不同,是“碰到一个,生成一个" |
- | | + | == 问:这次大作业和JAVA有什么联系? |
- | | + | 答:注意JAVA和C++有很大不同,所以只能说把JAVA中函数的功能在表面上实现了。就像英语中有些意思中文无法表达,中文的有些意思英文无法表达一样。所以请不要有“我实现了JAVA的STL”这种想法。我们这里注重的是数据结构的使用,STL只是一个包装而已。 |
+ | == 问:ArrayList:: | ||
+ | 答:不要认为一个容器类和它的迭代器类是有附属关系的,要知道他们两个只是名字空间上有附属关系,别的地方时独立的,如:假如你arraylist有一个私有域叫做int len; | ||
+ | == 问:什么是Map? | ||
+ | 答:很多人不知道map是何物。我就举个例子吧,map里面存的就是一个一个的键-值对,就拿我们班来举例子,我们可以搞一个学号(键)-人名(值)对Map< | ||
| | ||
| | ||
| | ||
| | ||
- | 这样,然后,我们可以向这个map询问某个键对应的值是什么,或者某个值存不存在,这些方法。 | + | 这样,然后,我们可以向这个map询问某个键对应的值是什么,或者某个值存不存在,这些方法。很多人发现treeset和treemap在实现的时候几乎一摸一样,这是对的,因为treemap< |
- | 很多人发现treeset和treemap在实现的时候几乎一摸一样,这是对的,因为treemap< | + | |
final_project.1333182048.txt.gz · Last modified: 2012/03/31 08:20 by xcyan