一、函数模版
比较两个数的大小。
代码:
#include <iostream> using namespace std; template <typename T> inline int myCompare(const T &a, const T &b) { if(a > b) return 1; else if(a < b) return -1; else return 0; } int main() { cout << myCompare(1, 0) << endl; cout << myCompare(1.0, 2.0) << endl; cout << myCompare(1.0f, 1.0f) << endl; return 0; }
二、类模版
用c++中的类模版来实现标准函数库中的队列
代码:
#include <iostream> #include <vector> #include <iterator> using namespace std; template <typename T> queue; template <typename T> class queueItem { private: friend class queue<T>; queueItem<T> (const T &i) : item(i), next(0) {} T item; queueItem *next; }; template <typename T> class queue{ public: queue() : head(0), tail(0), n(0) {}; queue& operator=(const queue &q); queue(const queue &q); ~queue(); void push(const T &i); void pop(); T front(); T back(); bool empty() { if(n > 0) return false; else return true; } size_t size() { return n; } void claer(); private: size_t n; queueItem<T> *head; queueItem<T> *tail; void copy_queue(const queue &q); } template <typename T> void queue<T>::push(const T &i) { queueItem<T> *temp = new queueItem<T>(i); if(n == 0) { head = tail = temp; } else { tail -> next = temp; tail = temp; } n++; } template <typename T> void queue<T>::pop() { if(n > 0) { queueItem<T> *temp = head; head = head -> next; delete temp; n--; } } template <typename T> T queue<T>::front() { if(n > 0) return head->item; return NULL; } template <typename T> T queue<T>::back() { if(n > 0) return tail->item; return NULL; } template <typename T> void queue<T>::claer() { while(n > 0) { pop(); } } template <typename T> void queue<T>::~queue() { claer(); } template <typename T> queue<T>::queue(const queue &q) : head(0), tail(0), n(0) { copy_queue(q); } template <typename T> queue<T> queue<T>::operator=(const queue &q) { if(this != &q) { n = 0; claer(); copy_queue(q); } return *this; } template <typename T> void queue<T>::copy_queue(const queue &q) { queueItem<T> *temp = q.head; while(temp) { push(temp->item); temp = temp->next; } }
时间: 2024-11-10 08:20:36