Однозв ‘ язні списки з ітераторами •

  • Размер: 60 Кб
  • Количество слайдов: 9

Описание презентации Однозв ‘ язні списки з ітераторами • по слайдам

Однозв ' язні списки з ітераторами • Поняття про патерни • Ітератор - патерн поведінки обОднозв ‘ язні списки з ітераторами • Поняття про патерни • Ітератор — патерн поведінки об ‘ єктів • C труктура ітератора • Int_list : : Ilist_iter • Методи Int_list: : iterator • Позиціювання вузлів ітераторами • Використання ітераторів

Поняття про патерни • Патерн – шаблон проектування (ідея-проф. архітектури С hristofer Alexander) • E. Gamma,Поняття про патерни • Патерн – шаблон проектування (ідея-проф. архітектури С hristofer Alexander) • E. Gamma, R. Helm, R. Johnson, J. Vlissides «Design Patterns: Elements of Reusable Object-Oriented Software» (1995) • C тандартизація – інформації про типову проблему – методах її розв ‘ язання • Шаблони утворення об ‘ єктів Singleton, Builder, Abstract Factory, Factory Method, Prototype • Структурні шаблони Adapter, Bridge, Composite, Decorator, Facade, Proxy. . . • Шаблони поведінки Command, Interpreter, Iterator , Observer, State, Strategy, Visitor. . . • Системні шаблони MVC, Session, Callback, Router, Transaction

Ітератор - патерн поведінки об ' єктів Go. F:  • Призначення:  надає спосіб послідовногоІтератор — патерн поведінки об ‘ єктів Go. F: • Призначення: надає спосіб послідовного доступу до всіх елементів складного об ‘ єкта ( напр. , списку ), не розкриваючи його внутрішньої будови • Мотивація : – за доступ до елементів і обхід відповідає не складний об ‘ єкт, а окремий об ‘ єкт-ітератор – фіксований набір операцій – можливість різних обходів – довільна кількість об ‘ єктів-ітераторів • Учасники: Iterator, Concrete. Iterator, Aggregate, Concrete. Aggregate

C труктура ітератора Concrete. Iterator. Aggregate Create. Iterator() Concrete. Aggregate Create. Iterator() Iterator First() Next() Current.C труктура ітератора Concrete. Iterator. Aggregate Create. Iterator() Concrete. Aggregate Create. Iterator() Iterator First() Next() Current. Item()Client

Int_list : : Ilist_iter class Int_list: public List {  . . public: class Ilist_iter{ LinkInt_list : : Ilist_iter class Int_list: public List { . . public: class Ilist_iter{ Link * curr; friend Int_list; // розширення інтерфейсу списку void past_element(){ curr+=1; } public: Ilist_iter(): curr(0){} Ilist_iter(const List& l): curr(l. top()){} Ilist_iter(const Ilist_iter& it): curr(it. curr){} Ilist_iter& operator=(const Ilist_iter& it){ if(this!=&it)curr=it. curr; return *this; } Ilist_iter& operator++(); bool operator==(const Ilist_iter& it)const{return curr==it. curr; } bool operator!=(const Ilist_iter& it)const{return curr!=it. curr; } int& operator*()const{return ((Int_link*)curr)->data; } void operator*(int d){ ((Int_link*)curr)->data=d; } Int_link* current()const{return (Int_link*)curr; } }; };

Методи  Int_list: : iterator& Int_list: : iterator: : operator++(){ if(curr-next)curr=curr-next; else ++curr; return *this; }Методи Int_list: : iterator& Int_list: : iterator: : operator++(){ if(curr->next)curr=curr->next; else ++curr; return *this; } const Int_list: : iterator Int_list: : end()const{ iterator it(*this); if(empty()) return it; Link* temp=head; while ( temp ){ if (!temp->next)it. past_element(); else ++it; temp=temp->next; } return it; }

Int_list: : find () Int_link* Int_list: : find(int d)const{ if(!head){ return 0; } iterator it=begin(); iteratorInt_list: : find () Int_link* Int_list: : find(int d)const{ if(!head){ return 0; } iterator it=begin(); iterator itn=it; ++itn; while(itn!=end() && (*it!=d)){ it=itn; ++itn; } if(*it==d) return it. current(); return 0; } Int_link* Int_list: : find(int d)const{ if(!head){ return 0; } Int_link* tmp=(Int_link* )head; Int_link* tmpn=(Int_link* )tmp->next; while(tmpn->next && (tmpn->data!=d)){ tmp=tmpn; tmpn=(Int_link*)tmpn->next; } if(tmpn->data==d) {return tmpn; } return 0; }

Позиціювання вузлів ітераторами Int_list a; next data next 0 data head   cu rr itПозиціювання вузлів ітераторами Int_list a; next data next 0 data head cu rr it 1 cu rr it 2 4 it e 3 Int_list: : iterator it(a); Int_list: : iterator it 1( it ); const Int_list: : iterator ite=a. end(); while(!(it==ite)){ cout<<*it<<endl; ++it; }

Використання ітераторів // у методах списку void Int_list: : print()const{ iterator it(*this);  const iterator ite=end();Використання ітераторів // у методах списку void Int_list: : print()const{ iterator it(*this); const iterator ite=end(); while(!(it==ite)){ cout<<*it<<endl; ++it; } } // у зовнішньому коді Int_list: : iterator it(a); const Int_list: : iterator ite=a. end(); while(!(it==ite)){ cout<<*it<<endl; ++it; } it=a. begin(); ++it; *it=100; cout <<*it;