一、函数模版
比较两个数的大小。
代码:
#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;
}
}