您的位置:首页 > 编程语言 > C语言/C++

[C++]queue简单实现--关于模板

2016-03-05 10:00 701 查看
#include <iostream>
#include <vector>
using namespace std;

template <class Type> class Queueitem {
template <class type> friend class Queue;
Queueitem(const Type &t) : item(t), next(0) {}
Type item;
Queueitem *next;
};

template <class type>
class Queue {
public:
// template <class Type> friend class Queueitem;
Queue() : head(0), tail(0) {}
Queue(const Queue &t) : head(0), tail(0) {
copy_elems(t);
}
Queue& operator=(const Queue&);
~Queue() { destory(); }
template <class It>
Queue(It beg, It end) : head(0), tail(0) {
copy_elems(beg, end);
}
type& front() {
return head->item;
}
const type& front() const {
return head->item;
}
void push(const type &);
void pop();
bool empty() const {
return head == 0;
}

private:
Queueitem<type> *head;
Queueitem<type> *tail;
void destory();
void copy_elems(const Queue &);
template <class Iter> void copy_elems(Iter beg, Iter end) {
Iter it;
for (it = beg; it != end; it++) {
push(*it);
}
}
};
template<class type> class Queue;
template <class type> void Queue<type>::destory() {
while (!empty()) {
pop();
}
}

template <class type> void Queue<type>::pop() {
Queueitem<type> *p = head;
head = head->next;
delete p;
}

template <class type> void Queue<type>::push(const type &t) {
Queueitem<type> *pt = new Queueitem<type>(t);
if (empty()) {
head = tail = pt;
} else {
tail->next = pt;
tail = pt;
}
}

template <class type> void Queue<type>::copy_elems(const Queue<type> &orig) {
for (Queueitem<type> *pt = orig.head; pt; pt = pt->next) {
push(pt->item);
}
}

template <class type> Queue<type>& Queue<type>::operator=(const Queue<type> &orig) {
Queue<type> it;
it.copy_elems(orig);
return it;
}

int main() {
// Queue<int> qi;
vector<short> a;
a.push_back(12);
a.push_back(13);
a.push_back(14);
Queue<int> qi(a.begin(), a.end());
cout << qi.front() << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: