Simply write the query and list implementations, and put the code here for later viewing.
Query
QueryItem.h
#ifndef queueitem#define queueitem#include <iostream>using namespace std;template <typename Type> class Queue;template <typename t>ostream& operator<< (ostream&, const queue<t> &); template <typename t>istream& operator>> (istream&, queue<t> &); template <typename T>class Queueitem{friend class Queue<t>;friend ostream& operator<< <T> (ostream&, const Queue<T >&) friend istream& operator>> <T> (istream&, queue<t>&); Queueitem (T val): Value (val), next (0) {}t value; Queueitem *next;}; #endif
Query.h
#ifndef queue#define queue#include "QueueItem.h" #include <iostream>using namespace std;template <typename T >ostream& operator<< (ostream&, const queue<t> &); template <typename t>istream& Operator>> (Istream&, queue<t> &); template <typename T>class queue{public:queue (): Head (0), Tail (0) {}queue (queue &); template <class type> queue (type Beg, type End): Head (0), tail (0) {Copy_elems (Beg, end) ;}; Template <class type> void Assin (type Beg, type End) {Destroy (); Copy_elems (beg, end);} Queue operator= (queue &); void push (T val); void Pop (); t& Front (); bool Empty () {return head==0;} ~queue () {Destroy ();} Friend ostream& operator<< <T> (ostream&, const queue<t>&); Friend istream& operator >> <T> (istream&, queue<t>&);p rivate:void destroy (); Queueitem<t> *head; queueitem<t> *tail;template <typename type> void Copy_elems (type Beg, type end);};#endif Query.cpp
#include "Queue.h" template <typename t> queue<t>::queue (Queue &que) {head = 0;tail = 0;for (queueitem< T>*QT = Que.head; Qt QT = qt->next) {push (Qt->val);}} Template <typename t> void queue<t>::p Ush (T val) {queueitem<t>* qt = new queueitem<t> (val); Empty ()) {head = tail = qt;} Else{tail->next = Qt;tail = qt;}} Template <typename t> void Queue<t>::p op () {//delete team head element queueitem<t> *qt = Head;head = Head->nex T;delete QT;} Template <typename t>void queue<t>::d Estroy () {while (!empty ()) pop ();} template <typename T>queue <T> queue<t>::operator= (queue<t> &que) {//does not check its own assignment destroy (); for (QUEUEITEM<T>*QT = que.h ead Qt QT = qt->next) {push (qt->val);} return *this;} Template <typename t>t& Queue<t>::front () {return head->value;} Template <typename t>ostream& operator<< (ostream &os, const queue<t>& q) {queueitem<t > *qt;os<< "<"; for (qt= Q.head; qt; qt= qt->next) {os << qt->value << "";} Os << ">"; return OS;} Template <typename t>istream& operator>> (IStream &is, queue<t> &q) {T val;while (is >& Gt val) {Q.push (val);} return is;} Template <typename t>template <typename type>void queue<t>::copy_elems (type Beg, type End) {while (Beg ! = end) {push (*beg); beg++;}}
list:
ListItem.h
#ifndef listitem#define listitem#include <iostream>using namespace std;template <typename T> class List; Template <typename t>istream& operator>> (IStream &is, list<t> &list); template < TypeName t>ostream& operator<< (ostream &os, const list<t> &list); template <typename T >class Listitem{friend class list<t>; ListItem (T val): Value (val), next (0) {}t value; ListItem *next;friend istream& operator>> <T> (IStream &is, list<t> &list); Friend Ostream & operator<< <T> (ostream &os, const list<t> &list);}; #endif
List.h
#ifndef list#define list#include "ListItem.h" #include <iostream>using namespace std;template <typename t> istream& operator>> (IStream &is, list<t> &list); template <typename t>ostream& operator<< (ostream &os, const list<t> &list); template <typename T>class list{public:list (): Head (0), end (0) {}list (list &list): Head (0), end (0) {copy_elems (list);} list& operator= (const List &list); template <typename type> List (type Beg, type End): Head (0), end (0) {Copy_ Elems (Beg, end);} void push_back (const t &val), void Pop_back (), void Pop_front (), void Push_front (const t &val); t& Front () {return head->value;} t& back () {return end->value;}; bool Empty () {return head = = 0;} Template <typename type> void assign (type Beg, type End) {Destroy (); Copy_elems (beg, end);} void Insert (listitem<t> *ptr, const t& val); void del (listitem<t> *ptr); Listitem<t> *find (const T &val); ~list () {Destroy();} Private:listitem<t> *head; Listitem<t> *end;void Copy_elems (List &); template <typename type> void Copy_elems (type Beg, type End); void Destroy (); friend istream& operator>> <T> (IStream &is, list<t> &list); Friend Ostream & operator<< <T> (ostream &os, const list<t> &list);}; #endif
List.cpp
#include "List.h" #include <iostream>using namespace std;template <typename t>void list<t>::p ush_ Back (const T &val) {listitem<t> *lt = new Listitem<t> (val), if (empty ()) {head = end = lt;} else{end->next= lt;end = lt;}} Template <typename t>void list<t>::p ush_front (const T &val) {listitem<t> *lt = new Listitem<t > (val); if (empty ()) {head = end = lt;} Else{lt->next = Head;head = lt;}} Template <typename t>void list<t>::p op_front () {listitem<t> *lt = Head;head = Head->next;delete lt;} Template <typename t>void list<t>::p op_back () {listitem<t> *lt=head;while (Lt->next = = end) {end = Lt;delete Lt->next;}} Template <typename t>void list<t>::copy_elems (list<t> &list) {listitem<t> *lt;for (lt = List.head; Lt lt = lt->next) {push_back (Lt->value);}} Template <typename t>void list<t>::d Estroy () {while (!empty ()) Pop_front ();} Template <typename t>template < TypeName type>void List<t>::copy_elems (type Beg, type End) {while (Beg! = end) {push_back (*beg); ++beg;}} Template <typename t>ostream& operator<< (ostream &os, const list<t> &list) {OS << "& lt; "; Listitem<t> *lt;for (lt = list.head; lt; lt = lt->next) {os << lt->value << "";} Os << ">"; return OS;} Template <typename t>istream& operator>> (IStream &is, list<t> &list) {T val;while (is > > val) list.push_back (Val); return is;} Template <typename t>list<t>& list<t>::operator= (const list<t> &) {destroy (); Copy_ Elems (list); return *this;} Template <typename t>void List<t>::insert (listitem<t> *ptr, const t& val) {listitem<t> *new _lt = new Listitem<t> (val); listitem<t> *lt= head;if (lt = = ptr) {new_lt->next = Ptr;head = New_lt;return;} while (lt->next! = ptr && lt! = end) {lt = Lt->next;} if (Lt->next = = ptr) {new_lt-≫next = Ptr;lt->next = New_lt;}} Template <typename t>void list<t>::d El (listitem<t> *ptr) {listitem<t> *lt= head;if (lt = = ptr) { head = Lt->next;delete Lt;return;} while (lt->next! = ptr && lt! = end) {lt = Lt->next;} if (Lt->next = = ptr) {lt->next = ptr->next;if (ptr = = end) end = Lt;delete ptr;}} Template <typename t>listitem<t>* list<t>::find (const T &val) {for (listitem<t> *lt = head; Lt lt= lt->next) {if (Lt->value = = val) {return lt;}} return 0;}
Main.cpp
#include "Queue.h" #include "Queue.cpp" //The instantiation of the compiled model template must have access to the source code at compile-time, whereas ordinary functions or classes need only be declared and placed in the symbol table # Include <iostream> #include <vector> #include "List.h" #include "List.cpp" using namespace Std;int Main () {/* Queue<int> Q;q.push (5); Q.push (2); int a[]={1,2,3,4}; Queue<int> Q2 (A, a+4); cout << Q2 << endl;//cout << q.empty () << endl;//cout << q <&L T Endl;//cin >> Q; Returns the result left operand//operator>> (CIN, Q);operator<< (cout, q); Vector<int> vec;int i;/*while (cin >> i) {vec.push_back (i);} for (Vector<int>::iterator iter = Vec.begin (); ITER! = Vec.end (); iter++) {cout << *iter << "";} cout << endl;*/list<int> list;list.push_back (1); int a[5] ={1,2,3,4,5};list.assign (A, a+5); List.find (5); cout << list << Endl;return 0;}
Container Query and List