User Tools

Site Tools


final_project

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
final_project [2012/03/31 08:20] – [Q&A] xcyanfinal_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:
    TreeMap    TreeMap
  
-==== Origin of the Project ====+==== Origin of Project ====
  
 本次作业Xiao哥的初衷是用C++实现JAVA的STL,关于原本JAVA的STL,大家可以参见 本次作业Xiao哥的初衷是用C++实现JAVA的STL,关于原本JAVA的STL,大家可以参见
-http://download.oracle.com/javase/6/docs/api/+[[http://download.oracle.com/javase/6/docs/api/|JAVA STL]]
  
 但注意JAVA和C++有很大不同,所以只能说把JAVA中函数的功能在表面上实现了。就像英语中有些意思中文无法表达,中文的有些意思英文无法表达一样。所以请不要有“我实现了JAVA的STL”这种想法。我们这里注重的是数据结构的使用,STL只是一个包装而已。 但注意JAVA和C++有很大不同,所以只能说把JAVA中函数的功能在表面上实现了。就像英语中有些意思中文无法表达,中文的有些意思英文无法表达一样。所以请不要有“我实现了JAVA的STL”这种想法。我们这里注重的是数据结构的使用,STL只是一个包装而已。
- 
 ==== About Template Class ==== ==== About Template Class ====
  
Line 55: Line 54:
 ==== What does "Bees" mean? ==== ==== What does "Bees" mean? ====
  
-本次大作业的目的是让大家能熟练地掌握本学期所学的几种数据结构:队列、Hash表、平衡树,使用它们去实现在JAVA标准库中的一些集合类Set,Map,List。在我们的压缩包中,将会给出6个库文件,分别是arraylist,linkedlist,hashmap,hashset,treemap,treeset,还有一个比较特殊的文件是utility,这个文件中包含了一些会用到的子类(两个异常类和map的entry),还有一些可能会对大家有帮助的方法,是由一个很萌的助教提供的。在这些库文件中,我们给出了每个类的“接口”(公共方法),而大家所要做的,就是去写出这些类的私有域,并给出这些类的是实现。每个库文件都给出了非常详尽的注释,包括了每个类用什么数据结构实现,每个方法的用途和细节,参考的时间复杂度。还有要注意的是,因为模板类的关系,必须把实现和库文件放在一起。   +本次大作业的目的是让大家能熟练地掌握本学期所学的几种数据结构:队列、Hash表、平衡树,使用它们去实现在JAVA标准库中的一些集合类Set,Map,List。在我们的压缩包中,将会给出6个库文件,分别是 
-关于原本JAVA的STL,大家可以参见[JAVA STL](http://download.oracle.com/javase/6/docs/api/)+  - Arraylist 
 +  - Linkedlist 
 +  - Hashmap 
 +  - Hashset 
 +  - Treemap 
 +  - Treeset 
 + 
 +还有一个比较特殊的文件是utility,这个文件中包含了一些会用到的子类(两个异常类和map的entry),还有一些可能会对大家有帮助的方法,是由一个很萌的助教提供的。在这些库文件中,我们给出了每个类的“接口”(公共方法),而大家所要做的,就是去写出这些类的私有域,并给出这些类的是实现。每个库文件都给出了非常详尽的注释,包括了每个类用什么数据结构实现,每个方法的用途和细节,参考的时间复杂度。还有要注意的是,因为模板类的关系,必须把实现和库文件放在一起。关于原本JAVA的STL,大家可以参见[[http://download.oracle.com/javase/6/docs/api/|JAVA STL]]
  
 ==== 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&=====
  
-  - 问:为什么要把实现写放到库文件里去?  答:模板类的编译过程和普通类不同,是“碰到一个,生成一个",比如发现程序中有个vector<int>,才会去对vector专门生成一个int版本的代码,而如果你只include了函数声明,没有函数的 实现,而C++又是单文件编译的,那么函数实现的代码就没有被生成出来!因此,必须把声明和实现的代码都放到库文件中去。 +== 问:为什么要把实现写放到库文件里去 == 
-  问:这次大作业和JAVA有什么联系?  答:注意JAVA和C++有很大不同,所以只能说把JAVA中函数的功能在表面上实现了。就像英语中有些意思中文无法表达,中文的有些意思英文无法表达一样。所以请不要有“我实现了JAVA的STL”这种想法。我们这里注重的是数据结构的使用,STL只是一个包装而已。 +答:模板类的编译过程和普通类不同,是“碰到一个,生成一个",比如发现程序中有个vector<int>,才会去对vector专门生成一个int版本的代码,而如果你只include了函数声明,没有函数的 实现,而C++又是单文件编译的,那么函数实现的代码就没有被生成出来!因此,必须把声明和实现的代码都放到库文件中去。 
-  问:ArrayList::iterator和ArrayList的关系是?  答:不要认为一个容器类和它的迭代器类是有附属关系的,要知道他们两个只是名字空间上有附属关系,别的地方时独立的,如:假如你arraylist有一个私有域叫做int len;你的arraylist::iterator里面是不能直接调用这个len变量的,这两个类是完全独立的。那么如何解决这个问题呢?只需要在arraylist::iterator里面开一个私有域arrayList *arr,在iterator()方法里,构造一个迭代器的时候把this指针赋给这个arr,然后在迭代器里,就可以通过这个arr去修改这个迭代器所对应的arraylist了。   +== 问:这次大作业和JAVA有什么联系? == 
-  问:什么是Map?  答:很多人不知道map是何物。我就举个例子吧,map里面存的就是一个一个的键-值对,就拿我们班来举例子,我们可以搞一个学号(键)-人名(值)对Map<int,string> ACMclass,里面存的就是  +答:注意JAVA和C++有很大不同,所以只能说把JAVA中函数的功能在表面上实现了。就像英语中有些意思中文无法表达,中文的有些意思英文无法表达一样。所以请不要有“我实现了JAVA的STL”这种想法。我们这里注重的是数据结构的使用,STL只是一个包装而已。 
 +== 问:ArrayList::iterator和ArrayList的关系是? == 
 +答:不要认为一个容器类和它的迭代器类是有附属关系的,要知道他们两个只是名字空间上有附属关系,别的地方时独立的,如:假如你arraylist有一个私有域叫做int len;你的arraylist::iterator里面是不能直接调用这个len变量的,这两个类是完全独立的。那么如何解决这个问题呢?只需要在arraylist::iterator里面开一个私有域arrayList *arr,在iterator()方法里,构造一个迭代器的时候把this指针赋给这个arr,然后在迭代器里,就可以通过这个arr去修改这个迭代器所对应的arraylist了。   
 +== 问:什么是Map? == 
 +答:很多人不知道map是何物。我就举个例子吧,map里面存的就是一个一个的键-值对,就拿我们班来举例子,我们可以搞一个学号(键)-人名(值)对Map<int,string> ACMclass,里面存的就是  
      1-LCC        1-LCC  
      2-msh        2-msh  
      3-ec        3-ec  
      4-pure        4-pure  
-这样,然后,我们可以向这个map询问某个键对应的值是什么,或者某个值存不存在,这些方法。   +这样,然后,我们可以向这个map询问某个键对应的值是什么,或者某个值存不存在,这些方法。很多人发现treeset和treemap在实现的时候几乎一摸一样,这是对的,因为treemap<K,V>模糊点说就是treeset<Entry<K,V> ,除了一个键只能对应一个值。  
-很多人发现treeset和treemap在实现的时候几乎一摸一样,这是对的,因为treemap<K,V>模糊点说就是treeset<Entry<K,V>>,除了一个键只能对应一个值。  +
  
  
final_project.1333182048.txt.gz · Last modified: 2012/03/31 08:20 by xcyan

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki