Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- template<class T>
- struct node{ //структура узел
- T data;
- node * next; //указатель на следующий узел.
- node(T d){ data =d; next=NULL;} //конструктор
- };
- template<class T>
- class List{
- node<T>* first; node<T>*last; //указатель на первый и последний узлы соответственно
- int size; //количество элементов в списке
- public:
- List();
- ~List();
- void push_back(T d); //добавление элемента в конец
- template<class T>
- friend ostream& operator <<(ostream& , List<T> &); //перегрузка оператора вывода
- template<class T>
- class iterator{ //класс Итератор для обращения к элемента списка
- node<T> *p;
- public:
- iterator() {p=NULL;}
- iterator(node<T> *pp) {p=pp;}
- T & operator *(){ return p->data;}
- bool operator == (iterator <T> pp){ if (pp.p==p) return true; else return false;}
- bool operator != (iterator <T> pp){ if (pp.p!=p) return true; else return false;}
- iterator & operator = (node<T> * n){p=n; return *this;}
- node<T>* uk(){return p;}
- iterator & operator ++(){
- p=p->next;
- return *this;
- }
- };
- iterator <T> begin(){ //итератор, указывающий на начало
- iterator <T> it(first);
- return it;
- }
- iterator <T> end(){ //итератор, указывающий на конец
- iterator <T> it(last);
- return it;
- }
- iterator<T> find(T key){ //функция поиска, с помощью которой мы можем получить
- for(iterator<T> it=begin();it!=end();){ //к элементу списка, содерж. ключ key
- if (*it==key) return it;
- ++it;
- }
- return NULL;
- }
- };
- template<class T>
- List<T>::List(){
- first=NULL;
- last=NULL;
- size=0;
- }
- template<class T>
- List<T>::~List(){
- node<T>*tmp=first;
- while(tmp!=last){
- first=first->next;
- delete tmp;
- tmp=first;
- }
- delete tmp;
- }
- template<class T>
- void List<T>::push_back(T d){
- if (first==NULL)
- {
- first=new node<T>(d);
- last=first;
- size++;
- }
- else
- {
- node<T> *tmp=new node<T>(d);
- last->next=tmp;
- size++;
- last=last->next;
- }
- }
- template<class T>
- ostream & operator <<(ostream& out, List<T> &l){
- if (l.first==NULL)
- out<<"NO";
- else
- for(node<T>*tmp=l.first;tmp!=NULL; tmp=tmp->next )
- out<<tmp->data<<endl;
- return out;
- }
Add Comment
Please, Sign In to add comment