Fejlett programozási nyelvek C++ Iterátorok



Hasonló dokumentumok
STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

C++ Standard Template Library (STL)

Bevezetés a programozásba 2

1.AA MEGOLDÓ BERCI AA 1.

A C++ Standard Template Library rövid összefoglalás

C++11 TÓTH BERTALAN C++ PROGRAMOZÁS STL KONTÉNEREKKEL

Fejlett programozási nyelvek C++ Sablonok és adatfolyamok

C++ Gyakorlat jegyzet 10. óra.

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

500.AA Megoldó Kulcsár 500.A

Programozási technológia

XIII. STL. Tároló Bejáró Algoritmus. XIII.1 A vector #include <vector> #include <vector> #include <algorithm> using namespace std;

500. AA Megoldó Alfréd AA 500.

Fejlett programozási nyelvek C++

1000.AA Megoldo Alfréd 1000.A

C++ Standard Template Library

C++ Gyakorlat jegyzet 10. óra

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

Generikus osztályok, gyűjtemények és algoritmusok

500. CC Megoldó Alfréd CC 500.

.AA Megoldó Alfréd AA.

Challenge Accepted:C++ Standard Template Library

Programozás. C++ típusok, operátorok. Fodor Attila

500.AA Megoldo Arisztid 500.A

117. AA Megoldó Alfréd AA 117.

Reader /Writer InputStreamReader, OutputStreamWriter

500. DD Megoldó Alfréd DD 500.

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Szövegek C++ -ban, a string osztály

ISA szimulátor objektum-orientált modell (C++)

Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Generikus Típusok, Kollekciók

Alprogramok, paraméterátadás

Körkörös listák. fej. utolsó. utolsó. fej

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

503.AA Megoldo Arisztid 503.A

Elemi alkalmazások fejlesztése II. 2. Beadandó feladat Juhász Ádám

Programozás II gyakorlat. 8. Operátor túlterhelés

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

0. Megoldó Manó 0. Programozás alapjai 2. (inf.) pót zárthelyi gyak. hiányzás: 2 n/kzhp: n/11,5. ABCDEF IB.028/2.

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Dinamikus láncolt lista 4. GYAKORLAT

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

feladat pont min elért

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4

Osztály és objektum fogalma

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

500.AJ Megoldó Magyar Magdolna 500.J

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

7. gyakorlat Sorozatok, Fájlkezelés

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Programozás II. 2. Dr. Iványi Péter

Informatika terméktervezőknek

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1.

Tervminták II. (Híd, Bejáró, Gyártófüggvény) Halmaz és bejárása Osztály-sablonok

128. AA Megoldó Alfréd AA 128.

Collections. Összetett adatstruktúrák

Pénzügyi algoritmusok

Objektumok inicializálása

Bevezetés, a C++ osztályok. Pere László

Pénzügyi algoritmusok

INFORMATIKAI ALAPISMERETEK

Programozás C++ -ban 2007/4

Elemi adatszerkezetek

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Objektumorientált programozás C# nyelven

Láncolt listák Témakörök. Lista alapfogalmak

Programozás alapjai II. (8. ea) C++ bejárók és egy tervezési példa

Bevezetés a programozásba I.

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök. Adatfolyamok Hibalehetőségek

Generatı v programok helyesse ge

Adatbázisok webalkalmazásokban

Adatszerkezetek és algoritmusok

Objektum elvű alkalmazások fejlesztése. Verem típus osztály-sablonja

Adatszerkezetek 7a. Dr. IványiPéter

1. Alapok. Programozás II

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

228. AA Default Konstruktor AA 228.

S z á m í t ó g é p e s a l a p i s m e r e t e k

INFORMATIKAI ALAPISMERETEK

Globális operátor overloading

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java.

FELÜLET...13 PROJEKTTERV...14

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Virtuális függvények (late binding)

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

C++ programozási nyelv Struktúrák a C++ nyelvben Gyakorlat

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Átírás:

Fejlett programozási nyelvek C++ Iterátorok 10. előadás Antal Margit 2009 slide 1

Témakörök I. Bevezetés II. Iterátor definíció III. Iterátorok jellemzői IV. Iterátorkategóriák V. Iterátor adapterek slide 2

I. Bevezetés Tárolók (konténerek) Sorozatok: vector<t>, deque<t>, list<t> Asszociatív tárolók: set<t>, map<t>, multiset<t>, multimap<t> Függvényobjektumok tárolók rendezettsége Iterátorok tárolók bejárása slide 3

Homogén és,,heterogén'' tárolók vector<szemely> Szemely Szemely Szemely... Szemely vector<szemely*>... Alkalmazott Szemely Alkamazott Alkalmazott slide 4

II. Iterátor - definíció Olyan objektumok, amelyek tetszőleges belső ábrázolású tároló bejárását biztosítják Iterátor osztály = pozíció + műveletek Általánosítják a mutató (pointer) fogalmát Intelligens mutató Biztosítják az algoritmusok alkalmazhatóságát különféle tárolóban meghatározható tartományokra slide 5

III. Iterátorok jellemzése kétféle iterátor van érvényes: it!= container.end() érvénytelen: vector<string>::iterator it; (nincs kezdőértéke) vector<string> v; //... for(it=v.begin(); it!=v.end(); ++it); it==v.end(); törlés vagy beszúrás következtében érvénytelenné vált slide 6

IV. Iterátorkategóriák Bemeneti iterátor Kimeneti iterátor Előre iterátor Kétirányú iterátor Közvetlen elérésű iterátor slide 7

Iterátorkategóriák Bemeneti iterátor Input Iterator előre olvas (csak!): object = *it;it++; Kimeneti iterátor Output Iterator előre ír (csak!): *it = object;it++; Előre iterátor Forward Iterator előre olvas és ír Kétirányú iterátor Bidirectional Iterator előre/hátra olvas és ír: it++; it--; Közvetlen elérésű iterátor Random Access Iterator: it+n; it-n; slide 8

Alapvető iterátor műveletek elem elérése: *it tag elérése: it->member előre léptetés: ++it vissza léptetés: --it slide 9

1. Bemeneti iterátorok Szekvenciális feldolgozást tesznek lehetővé Single Pass Iterator minden elemhez csak egyszer férhetünk hozzá Algoritmusok: find for_each slide 10

A find algoritmus template<class InIt, class T> InIt find( InIt first, InIt last, T what { for( ; first!= last; ++first ) if( *first == what ) return first; return first; } slide 11

A foreach algoritmus template<class InIt, class Func> Func for_each( InIt first, InIt last, Func f) { for( ;first!= last; ++first) f( *first ); return f; } slide 12

A foreach használata class Duplaz{ double osszeg; public: Duplaz() : osszeg ( 0 ){} void operator()( double& d ){ d += d; osszeg += d;} double getosszeg(){ return osszeg;} }; double x[]={1, 2, 3}; Duplaz fo; fo = for_each( x, x+3, fo); cout<<"osszeg: "<<fo.getosszeg()<<endl; slide 13

2. Kimeneti iterátorok szekvenciális feldolgozás csak írás művelet Single Pass Iterator minden pozíció csak egyszer írható Algoritmusok: copy slide 14

A copy algoritmus template <class InIt, class OutIt> OutIt copy( InIt first1, InIt last1, OutIt first2) { while( first1!= last1 ){ *first2 = *first1; first1++; first2++; } return first2; } slide 15

3. Előre iterátorok A bemeneti és a kimeneti iterátorok tulajdonságait egyesíti Multi Pass Iterator Ír és olvas, akár többször is ugyanazt a pozíciót Algoritmusok: replace slide 16

A replace algoritmus template < class FwdIt, class T > void replace ( FwdIt first, FwdIt last, const T& oldv, const T& newv ) { for (; first!= last; ++first) if (*first == oldv) *first=newv; } slide 17

4. Kétirányú iterátorok Olyan előre bejáró, amely lehetővé teszi a visszafele lépkedést is (it++, it--) A standard könyvtár minden tárolója legalább ilyen erősségű bejáróval rendelkezik Algoritmusok reverse_copy slide 18

A reverse_copy algoritmus template <class BiIt, class OutIt> OutIt reverse_copy ( BiIt first, BiIt last, OutIt result) { while ( first!=last ){ --last; *result = *last; result++; } return result; } slide 19

5. Közvetlen elérésű iterátorok Olyan kétirányú iterátor, amely it+n, it-n it1 < it2 Algoritmusok: sort, next_permutation,... slide 20

V. Iterátor adapterek Lehetővé teszik, hogy az iterátorok fordított, beszúró, illetve adatfolyam módban dolgozzanak. Vissza iterátorok Reverse Iterator Beszúró iterátorok Insert Iterator Adatfolyam iterátorok Stream Iterator slide 21

Viszza iterátorok Megfordítják a ++ és a -- operátorok jelentését. Segítségükkel az algoritmusok fordított sorrendben dolgozzák fel az elemeket. Minden tárolónak van, elérése: container.rbegin() container.rend() slide 22

Beszúró iterátorok Átalakítják az értékadó műveletet beszúró műveleté overwrite insert Miért szükségesek? Az algoritmusok alapértelmezetten felülírásos üzemmódban működnek slide 23

Beszúró iterátorok (2) template <class InIt, class OutIt> OutIt copy( InIt first1, InIt last1, OutIt first2) { while( first1!= last1){ *first2 = *first1;//ezt!!! first1++; first2++; } return first2; } slide 24

Beszúró iterátor típusok *pos = ertek; Név Osztály Függvény Létrehozás Hátra beszúró back_insert_iterator push_back( ertek) back_inserter(container) Előre beszúró front_insert_iterator push_front(ertek) front_inserter(container) Beszúró insert_iterator insert(poz, ertek) inserter(container,poz) slide 25

Beszúró iterátor példa //Helytelen int x[] = {1, 2, 3}; vector<int> v; copy( x, x+3, v.begin()); //Helyes int x[] = {1, 2, 3}; vector<int> v; copy( x, x+3, back_inserter(v)); slide 26

Adatfolyam (stream) iterátorok Cél: az algoritmusok a bemenetüket, illetve a kimenetüket adatfolyamhoz köthessék cin copy vector vector copy cout slide 27

Adatfolyam iterátorok Működési elv: írás adatfolyamba írás olvasás adatfolyamból olvas slide 28

Adatfolyam iterátorok példák Kimeneti: vector<int> v; copy(v.begin(), v.end(), ostream_iterator<int>(cout, ",")); Bemeneti: copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(v)); slide 29

Iterátor - tulajdonságok template< class T> struct iterator_traits{ }; typedef typename T::value_type value_type; typedef typename T::difference_type difference_type; typedef typename T::iterator_category iterator_category; typedef typename T::pointer pointer; typedef typename T::reference reference; slide 30

A CArray osztály template <class T> class CArray{ T * data; int size; public:... typedef T* iterator; typedef T value_type; typedef T& reference; typedef ptrdiff_t difference_type; typedef T * pointer; }; slide 31