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



Hasonló dokumentumok
Bevezetés a programozásba 2

117. AA Megoldó Alfréd AA 117.

Fejlett programozási nyelvek C++ Iterátorok

C++ Standard Template Library (STL)

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

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

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

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

4. Öröklődés. Programozás II

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

C++ Gyakorlat jegyzet 10. óra.

500. CC Megoldó Alfréd CC 500.

Programozás C++ -ban 2007/4

500. DD Megoldó Alfréd DD 500.

Programozás II gyakorlat. 4. Öröklődés

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

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.

C++ Gyakorlat jegyzet 10. óra

.AA Megoldó Alfréd AA.

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

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása

Gráfalgoritmusok: összefüggőség, párosítás páros gráfban

228. AA Default Konstruktor AA 228.

1.AA MEGOLDÓ BERCI AA 1.

infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália

INFORMATIKAI ALAPISMERETEK

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

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

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

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

Osztály és objektum fogalma

128. AA Megoldó Alfréd AA 128.

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

500. AA Megoldó Alfréd AA 500.

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

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

C# osztályok. Krizsán Zoltán

Géptermi zh-írás forgatókönyve

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

Programozás II. 6.Öröklés Dr. Iványi Péter

Bevezetés a C++ programozásba

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

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

INFORMATIKAI ALAPISMERETEK

Objektumorientált programozás C# nyelven

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

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

500.AA Megoldo Arisztid 500.A

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

Rekurzió. Horváth Gyula.

Származtatási mechanizmus a C++ nyelvben

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

500.AA Megoldó Kulcsár 500.A

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

1000.AA Megoldo Alfréd 1000.A

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

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

C# feladatok gyűjteménye

Maximum kiválasztás tömbben

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

.Net adatstruktúrák. Készítette: Major Péter

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Bánsághi Anna

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

3. Gyakorlat Ismerkedés a Java nyelvvel

503.AA Megoldo Arisztid 503.A

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

Pénzügyi algoritmusok

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

OPERÁCIÓS RENDSZEREK 1. ÁTIRÁNYÍTÁSOK, SZŰRŐK

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

C++ Standard Template Library

Alkalmazott modul: Programozás

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1. Készítette: Gregorics Tibor

Információs Technológia

C++ Gyakorlat jegyzet 7. óra

Algoritmizálás + kódolás C++ nyelven és Pascalban

C++ Gyakorlat jegyzet 9. óra

Objektumorientált programozás C# nyelven

Bevezetés a programozásba I.

Standard Template Library. Adatstruktúrák és algoritmusok a C++ nyelvhez

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

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?

500.AJ Megoldó Magyar Magdolna 500.J

Collections. Összetett adatstruktúrák

Access adatbázis elérése OLE DB-n keresztül

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.

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

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

Bevezetés a programozásba. 11. Előadás: Esettanulmány

Tartalom. Bevezetés. Referenciák. Objektum-orientált programozás. Sablonok. Standard Template Library. Template Metaprogramozás. C++0x.

111. AA Megoldó Alfréd AA 111.

Eseményvezérelt alkalmazások fejlesztése II. A.NET keretrendszer és a C# programozási nyelv. Objektumorientált programozási nyelvek A Smalltalk nyelv

C# feladatgyűjtemény Kovács Emőd, Radványi Tibor, Király Roland, Hernyák Zoltán

1/29. Standard Template Library. Template ek

Rekurzió. 1. Feladat: Sorbaállítások száma. 2. Feladat: Zsebpénz. Horváth Gyula Megoldás. Megoldás

Feladat: Hogyan tudunk létrehozni egy olyan vector nevű tömb típust, amely egy háromdimenziós térbeli vektort reprezentál?

Bevezetés a programozásba. 12. Előadás: 8 királynő

Mit ír ki? feladatok megoldásokkal

Átírás:

STL Elsődleges komponensek: Tárolók Algoritmusok Bejárók Másodlagos komponensek: Függvény objektumok Adapterek Allokátorok (helyfoglalók) Tulajdonságok Tárolók: Vektor (vector) Lista (list) Halmaz (set) Kétirányú sor (deque) Stack (adapter) Queue (adapter) Algoritmus: másolás, keresés, hozzáadás, törlés, transzformálás, konvertálás Bejáró típusok: író olvasó előre haladó kétirányú közvetlen elérésű Komponensek kapcsolata Algoritmus Iterátor Tároló -1-

Bejáró (iterátor) típusok: Input iterátor x=*i; ++i; i++ Output iterátor *i=x; ++i; i++ Forward iterátor Bidirectional iterátor --i; i-- Random access iterátor i+n; i-n, i+=n, i-=n i<j, i<=j, i>j, i>=j Vektor namespace std template < typename T, typename Allocator = allocator<t> > class vector... Vektor használata #include <vector>... vector<int> v1; // üres vektor vector<int> v2(5,-3); // 5 elemű vektor, minden eleme 3 értékű vector<int> v3(5); // 5 elemű vektor, az elemeknek nincs kezdeti értékük vector<int> v4(v2); // v2 vektorral inicializált új vektor vector<int> v5(v2.begin()+1, v2.begin()+5); // v2.begin()+5==v2.end() vector<int>::iterator i; for( i=v2.begin(); i!= v2.end(); ++i) cout<< *i; cout << ; int k=v2[3]; v2.front()=1; // első elem átírása v2.back()=5; // utolsó elem átírása v2.push_back(1); // új elem a vector végére v2.pop_back(); // utolsó elem eltávolítása Beszúrás vector<int> v1(5,7); // eredmény 77777 v1.insert(v1.begin()+1, 9); // 797777 v1.insert(v1.begin()+3, 2, 8); // 79788777-2-

Törlés vector<int> v; for( int k=1; k<9; k++) v.push_back(k); // 12345678 v.erase(v.begin()+5); // 1234578 Durva típushiba: vector<int>(5,3); // v.size()==5 vector<int>::iterator i = v.begin()+2; v.erase(i); *i = 9; // katasztrófa Kétirányú lista (list) #include <list>... list<int> l1; // üres lista list<int> l2(5,-3); // 5 elemű lista, minden eleme 3 értékű list<int> l3(5); // 5 elemű lista, az elemeknek nincs kezdeti értékük list<int> l4(l2); // l2 listával inicializált új lista list<int> l5(l2.begin(), l2.end()); list<int>::iterator i; for( i=l2.begin(); i!= l2.end(); ++i) cout<< *i; cout << ; A listák létrehozása kísértetiesen hasonlít a vektorok létrehozásához. Különbség, hogy a bejáró nem közvetlen elérésű, így nem lehet hozzáadni egész számot. További tagfüggvények : push_back, pop_back, push_front, pop_front, front, back, insert, erase, clear, size Kétirányú sor (deque) Olyan sor, ami véletlen elérésű, mint a vektor, és mind a két végére azonos idő alatt lehet egy elemet feltenni, illetve törölni. Adapter működése namespace std template< class T, class Container = deque<t> > class stack public : typedef Container::valus_type value_type;... protected : Container c; explicit stack( const Container& = Container() ); bool empty() const return c.empty(); size_type size() const return c.size(); value_type& top() return c.back(); const value_type& top() const return c.back(); void push( const value_type& x ) c.push_back(x); void pop() c.pop_back(); ; -3-

Halmaz (set) #include <set> class adat int k; int a; adat(int arg1, int arg2 ) k=arg1, a=arg2; friend bool operator<( const adat& a, const adat& b ) return a.k < b.k; friend operator<<( ostream& os, const adat& a ) os << "(" << a.k <<"," << a.a <<") "; ; set<adat> s; // üres set s.insert(adat(5,2)); s.insert(adat(2,5)); s.insert(adat(100,3)); s.insert(adat(88,10)); s.insert(adat(2,3)); // ezt nem teszi be mert már létezik set<adat>::iterator i, j; for( i=s.begin(); i!= s.end(); ++i) cout<< *i; cout <<' '; cout << endl; if( (i = s.find(adat(2,0)))!= s.end() ) cout << *i; else cout << "nem talalt"; Multiset esetén több azonos kulcsú elemet is fel lehet venni. #include <set> multiset<int> ms; multiset<int>::const_iterator l, u, i; int a[] = 7,3,4,1,7,7,9,0,8,7,9 ; ms.insert(a, a+sizeof(a)/sizeof(int) ); l = ms.lower_bound(7); u= ms.upper_bound(8); for( i=l; i!= u; ++i) cout << *i; cout <<" "; pair< multiset<int>::const_iterator, multiset<int>::const_iterator> lu = ms.equal_range(9); for( i=lu.first; i!= lu.second; ++i) cout << *i; cout <<" "; -4-

Asszociatív tömb (map) #include <map> #include <string> map<const string, unsigned int> telefonkonyv; map<const string, unsigned int>::iterator i; telefonkonyv["kiss Gizi"] = 210078; telefonkonyv["csonttoro Jani"] = 210578; telefonkonyv["hoher Jozsi"] = 43078; i = telefonkonyv.find("hoher Jozsi"); if( i==telefonkonyv.end() ) cout << "nem talalt"; else cout<< i->first << " " << i->second; Algoritmus namespace std template < class InIt, class Fun> Fun for_each(init first, InIt last, Fun f ); #include <map> #include <string> #include <algorithm> class func int db; func() db=0; int get_db() const return db; void operator()( pair<const string, unsigned int>& a ) cout<< a.first << " " << a.second << endl; ; db++; map<const string, unsigned int> telefonkonyv; telefonkonyv["milo Viki"] = 210078; telefonkonyv["csonttoro Jani"] = 210578; telefonkonyv["hoher Jozsi"] = 43078; telefonkonyv["madar"] = 578071; func f = for_each( telefonkonyv.begin(), telefonkonyv.end(), func() ); cout <<f.get_db(); Vigyázz, a függvényobjektumot az algoritmus érték szerint veszi át! -5-