- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
f1407.cpp
资源名称:c.rar [点击查看]
上传用户:puke2000
上传日期:2022-07-25
资源大小:912k
文件大小:3k
源码类别:
C#编程
开发平台:
Visual C++
- //=====================================
- // f1407.cpp
- // Using Class Template Specialization
- //=====================================
- #include<iostream>
- using namespace std;
- //-------------------------------------
- template<typename T>
- struct Node{
- Node(const T& d):c(d),next(0),pref(0){}
- T c;
- Node *next, *pref;
- };//-----------------------------------
- // 以下为基本类模板
- template<typename T>
- class List{
- Node<T> *first, *last;
- public:
- List();
- void add(const T& c);
- void remove(const T& c);
- Node<T>* find(const T& c)const;
- void print()const;
- ~List();
- };//-----------------------------------
- template<typename T>
- List<T>::List():first(0),last(0){}
- //-------------------------------------
- template<typename T>
- void List<T>::add(const T& n){
- Node<T>* p = new Node<T>(n);
- p->next = first; first = p;
- (last ? p->next->pref : last) = p;
- }//------------------------------------
- template<typename T>
- void List<T>::remove(const T& n){
- Node<T>* p = find(n);
- if(!p) return;
- (p->next ? p->next->pref : last) = p->pref;
- (p->pref ? p->pref->next : first) = p->next;
- delete p;
- }//------------------------------------
- template<typename T>
- Node<T>* List<T>::find(const T& n)const{
- for(Node<T>* p=first; p; p=p->next)
- if(p->c==n) return p;
- return 0;
- }//------------------------------------
- template<typename T>
- List<T>::~List(){
- for(Node<T>* p; p=first; delete p)
- first = first->next;
- }//------------------------------------
- template<typename T>
- void List<T>::print()const{
- for(Node<T>* p=first; p; p=p->next)
- cout<<p->c<<" ";
- cout<<"n";
- }//------------------------------------
- class Cat{
- string name;
- public:
- Cat(const string& n):name(n){}
- bool operator==(const Cat& c){ return name == c.name; }
- friend ostream& operator<<(ostream& o, const Cat& c){ return o<<c.name; }
- };//-----------------------------------
- // 以下为模板定做
- template<>
- class List<Cat>{
- Node<Cat> *first, *last;
- public:
- List();
- void add(const Cat& c);
- void remove(const Cat& c);
- Node<Cat>* find(const Cat& c)const;
- void print()const;
- ~List();
- };//-----------------------------------
- List<Cat>::List():first(0),last(0){}
- //-------------------------------------
- void List<Cat>::add(const Cat& n){ // 与类模板的成员函数实现上有差异
- if(find(n)) return;
- Node<Cat>* p = new Node<Cat>(n);
- p->next = first; first = p;
- (last ? p->next->pref : last) = p;
- }//------------------------------------
- void List<Cat>::remove(const Cat& n){
- Node<Cat>* p = find(n);
- if(!p) return;
- (p->next ? p->next->pref : last) = p->pref;
- (p->pref ? p->pref->next : first) = p->next;
- delete p;
- }//------------------------------------
- Node<Cat>* List<Cat>::find(const Cat& n)const{
- for(Node<Cat>* p=first; p; p=p->next)
- if(p->c==n) return p;
- return 0;
- }//------------------------------------
- List<Cat>::~List(){
- for(Node<Cat>* p; p=first; delete p)
- first = first->next;
- }//------------------------------------
- void List<Cat>::print()const{
- for(Node<Cat>* p=first; p; p=p->next)
- cout<<p->c<<" ";
- cout<<"n";
- }//------------------------------------
- int main(){
- List<Cat> cList;
- cList.add(string("alice"));
- cList.add(string("luise"));
- cList.add(string("luise"));
- cList.print();
- List<int> iList;
- iList.add(5);
- iList.add(8);
- iList.add(8);
- iList.print();
- }//====================================