MOOC清华《面向对象程序设计》第7章:统计考试及格率v2.0(采用迭代器、容器、模板方法)

xiaoxiao2021-02-28  34

//main.cpp #include <iostream> #include <cstdlib> #include "ArrayCollection.h" #include "LinkedListIterator.h" #include "LinkedListCollection.h" using namespace std; template <class _iterator> void analyze(_iterator begin, _iterator end){ int passed = 0, count = 0; for(_iterator p = begin; p != end; p++){ if(*p >= 60) passed++; count++; } cout << "passing rate = " << (float)passed / count << endl; } int main(int argc, char** argv) { float scores[] = {90,20,40,40,30, 60,70,30,90,100}; /* Collection* c = new ArrayCollection(10, scores); cout << "passing rate = " << (float)count_if(c->begin(), c->end(), passed()) / c.size() << endl; */ ArrayCollection<float> collection1(10, scores); LinkedListCollection<float> collection2(10, scores); analyze(scores, scores + 10); analyze(collection1.begin(), collection1.end()); analyze(collection2.begin(), collection2.end()); system("pause"); return EXIT_SUCCESS; }

//ArrayCollection.h #ifndef ArrayCollection_h #define ArrayCollection_h template <class T> class ArrayCollection{ T* _data; int _size; public: ArrayCollection():_size(10){ _data = new T[_size]; } ArrayCollection(int size):_size(size){ _data = new T[_size]; } ArrayCollection(int size, T* data):_size(size){ _data = new T[_size]; for(int i = 0; i < size; i++) *(_data + i) = *(data + i); } ~ArrayCollection(){ delete[] _data; } int size(){ return _size; }//其实这个函数没有用上 T* begin(){ return _data; } T* end(){ return (_data + _size); } }; #endif //LinkedListIterator.h #ifndef LinkedListIterator_h #define LinkedListIterator_h template <class T> struct LinkedListNode{ T _data; LinkedListNode *next; LinkedListNode():next(NULL){} LinkedListNode(T data):_data(data), next(NULL){} }; template <class T> struct LinkedListIterator{ LinkedListNode<T> *pointer; LinkedListIterator(LinkedListNode<T> *p):pointer(p){} LinkedListIterator(const LinkedListIterator<T>& it):pointer(it.pointer){} LinkedListIterator<T>& operator++(){ pointer = pointer->next; return *this; } const LinkedListIterator<T> operator++(int){ LinkedListIterator<T> temp = *this; pointer = pointer->next; return temp; } T& operator*() const{ return pointer->_data; } T* operator->() const{ return &(pointer->_data); } bool operator!=(const LinkedListIterator<T> &other){ return pointer != other.pointer; } bool operator==(const LinkedListIterator<T> &other){ return pointer == other.pointer; } }; #endif //LinkedListCollection.h #ifndef LinkedListCollection_h #define LinkedListCollection_h template <class T> class LinkedListCollection{ LinkedListNode<T>* _head; public: LinkedListIterator<T> begin(){ return LinkedListIterator<T>(_head); } LinkedListIterator<T> end(){ return LinkedListIterator<T>(NULL); } LinkedListCollection():_head(NULL){} LinkedListCollection(int size, T* data){ //... _head = NULL; for(int i = 0; i < size; i++){ LinkedListNode<T>* Node_data = new LinkedListNode<T>; Node_data->_data = *(data + i); Node_data->next = _head; _head = Node_data; } }//这个函数视频里省略了,我自己写的 ~LinkedListCollection(){ //... while(_head){ LinkedListNode<T>* tmp = _head; _head = _head->next; delete tmp; } }//这个函数视频里省略了,我自己写的 }; #endif

转载请注明原文地址: https://www.6miu.com/read-600262.html

最新回复(0)