Container Query and List

Source: Internet
Author: User

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&GT;*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&LT;T&GT;*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-&Gt;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

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.