Скачать презентацию Однозв язні списки з ітераторами Поняття про Скачать презентацию Однозв язні списки з ітераторами Поняття про

List_Iterators.ppt

  • Количество слайдов: 9

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

Поняття про патерни • Патерн – шаблон проектування (ідея-проф. архітектури Сhristofer Alexander) • E. Поняття про патерни • Патерн – шаблон проектування (ідея-проф. архітектури С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труктура ітератора Aggregate Create. Iterator() Client Iterator First() Next() Current. Item() Concrete. Aggregate Create. Cтруктура ітератора Aggregate Create. Iterator() Client Iterator First() Next() Current. Item() Concrete. Aggregate Create. Iterator() Concrete. Iterator

Int_list: : Ilist_iter class Int_list: public List {. . public: class Ilist_iter{ Link * Int_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(); Int_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; curr ite it 2 curr it 1 curr Int_list: Позиціювання вузлів ітераторами Int_list a; curr ite it 2 curr it 1 curr Int_list: : iterator it(a); Int_list: : iterator it 1(it); 2 const Int_list: : iterator ite=a. end(); 3 while(!(it==ite)){ cout<<*it<

Використання ітераторів // у методах списку void Int_list: : print()const{ iterator it(*this); const iterator Використання ітераторів // у методах списку void Int_list: : print()const{ iterator it(*this); const iterator ite=end(); while(!(it==ite)){ cout<<*it<