练习C/C++基本功(列表和迭代器的实现和测试)
2006-10-29 14:31
309 查看
练习C/C++基本功(列表和迭代器的实现和测试)
#include "stdafx.h" #include <iostream> #include "stdlib.h" #include "stdio.h" #include "time.h" using namespace std; long DEFAULT_LIST_CAPACITY = 30; template <class Item> class List { public: List ( long size = DEFAULT_LIST_CAPACITY ) { arr=new Item[size]; this->count=0; } List ( List& ls ) { if(ls.arr) delete arr; arr=new Item[ls.count]; for(int i=0;i<ls.count;i++) arr[i]=ls.arr[i]; this->count=ls.count; } ~List ( ) { if(arr) delete []arr; arr=NULL; } List operator = ( const List& ls ) { if(this=&ls) return *this; if(ls.arr) delete arr; arr=new Item[ls.count]; for(int i=0;i<ls.count;i++) arr[i]=ls.arr[i]; this->count=ls.count; } long Count ( ) const { return this->count; } Item& Get ( long index ) const { return arr[index]; } Item& First ( ) const { return arr[0]; } Item& Last ( ) const { return arr[this->count-1]; } bool Includes ( const Item& item) const { for(int i=0;i<this->count;i++) if(item==arr[i]) return true; return false; } void Append ( const Item& item) { Item* temp=new Item[this->count+1]; for(int i=0;i<this->count;i++) temp[i]=arr[i]; temp[i+1]=item; delete []arr; arr=temp; this->count++; } void Prepend ( const Item& item) { Item* temp=new Item[this->count+1]; for(int i=1;i<this->count+1;i++) temp[i]=arr[i]; temp[0]=item; delete []arr; arr=temp; this->count++; } void Remove ( const Item& item) { Item* temp=new Item[count-1]; for(int i=0;i<this->count;i++) if(item==arr[i]) { i++; } else { temp[i]=arr[i]; } delete []arr; arr=temp; this->count--; } void RemoveLast ( const Item& ) { Item* temp=new Item[count-1]; for(int i=0;i<count-1;i++) temp[i]=arr[i]; count--; } void RemoveFisrt ( const Item& ) { Item* temp=new Item[count-1]; for(int i=0;i<count-1;i++) temp[i]=arr[i+1]; count--; } void RemoveAll ( const Item& ) { delete []arr; arr=NULL; count=0; } Item& Top ( ) const { return arr[0]; } void Push ( const Item& item ) { Item* temp=new Item[count+1]; for(int i=0;i<count;i++) temp[i]=arr[i]; temp[i+1]=item; count++; } Item& Pop () { Item* temp=new Item[count-1]; Item item=arr[0]; for(int i=0;i<count-1;i++) temp[i]=arr[i+1]; delete arr; arr=temp; return item; } private: Item* arr; int count; }; template <class Item> class Iterator { public: virtual void First ( ) = 0; virtual void Next ( ) = 0; virtual bool IsDone ( ) const = 0; virtual Item CurrentItem ( ) const = 0; protected: Iterator ( ) {} }; template <class Item> class ListIterator : public Iterator<Item> { public: ListIterator(const List<Item>* aList); virtual void First(); virtual void Next(); virtual bool IsDone() const; virtual Item CurrentItem() const; private: const List<Item>* _list; long _current; }; template <class Item> ListIterator<Item>::ListIterator ( const List<Item>* aList ) : _list(aList), _current(0) { } template <class Item> void ListIterator<Item>::First () { _current = 0; } template <class Item> void ListIterator<Item>::Next () { _current++; } template <class Item> bool ListIterator<Item>::IsDone () const { return _current >= _list->Count(); } template <class Item> Item ListIterator<Item>::CurrentItem () const { if (IsDone()) { throw "IteratorOutOfBounds"; } return _list->Get(_current); } class Item { public: Item():a(0) { } Item(int a) { this->a=a; } bool operator!=(const Item& item) { if(this->a!=item.a) return true; else return false; } friend ostream& operator<<(ostream& os,const Item& item) { os<<item.a<<" "; return os; } private: int a; }; int main(int argc, char* argv[]) { List<Item>* ls=new List<Item>(10); ListIterator<Item> itor(ls); for(int i=0;i<10;i++) { Item item(i); ls->Prepend(item); } while(!itor.IsDone()) { cout<<itor.CurrentItem(); itor.Next(); } return 0; }
相关文章推荐
- 测试类图Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现
- SSH与SSM学习之SSH实现CRM练习06——客户列表06_页面和测试
- [算法导论]2.1节编程练习C++实现
- C++实现链表的进本操作及测试用例
- 用vector、 multimap、 list容器实现好友列表的各种操作 C++
- C++之位测试练习的相关代码
- 练习写C++代码(11)--实现简单的时钟类3
- C++实现链表的基本操作及测试用例
- c++实现“反应时间”测试
- C++中如何实现自定义类型的迭代器
- c++程序中写测试log到文件的简单实现
- Emacs中实现C/C++函数列表显示
- C++模板类线性表的实现与测试
- C++实现Miller-Rabin素数测试
- 堆栈顺序存储的c++实现与测试
- leetcode之24. Swap Nodes in Pairs(C++实现&链表实现和整体测试)
- Logistic回归模型的训练与测试,C++ 实现
- JAVA之旅(十九)——ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习
- C++实现Vector->类型萃取和List->迭代器
- 浅谈STL list<T>链表容器和迭代器的使用C++实现