3.1.2 函数模版与类模版

来源:互联网 发布:网络色情小说合集下载 编辑:程序博客网 时间:2024/05/01 12:48

一、函数模版

比较两个数的大小。

代码:

#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;    }}


0 0
原创粉丝点击