//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