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

Méret: px
Mutatás kezdődik a ... oldaltól:

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

Átírás

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

2 Bevezetés A Hewlett-Packard Company által fejlesztett sablonkönyvtár -> bekerült a C++98-ba Általánosított osztály- és függvénysablonokat tartalmaz a leggyakrabban alkalmazott adatstruktúrák és algoritmusok használatára Standard Template Library Programmer's Guide: Tóth Bertalan: C++ programozás STL konténerekkel konyv/progismhalado/ccpp/c11stl.pdf

3 Az STL részei Konténerek (tárolók) - adatstruktúrák Iterátorok (bejárók) Algoritmusok - az adattárolók elemeinek elérése - az alapvető algoritmusok megvalósítása (sorba rakás, keresés, szélsőértékek )

4 Az STL részei Konténerek Allokátorok Helyfoglaló Iterátorok Adapterek Illesztő Algoritmusok Funktorok Függvényobjektum (functors) Adapter tárolók Adatfolyamok (stream) String adatstruktúrára alapozott egyszerű kezelésű adatstruktúrák I/O C++

5 Példa Tároló Bejáró Algoritmus #include <vector> #include <algorithm> using namespace std; vector<int> vect; // a vect adatainak megadása sort(vect.begin(),vect.end());

6 Tárolók Soros array<> vector<> deque<> forward_list<> list<> Az elemek sorrendjét a tárolás sorrendje határozza meg. Rendezett set<> multiset<> map<> multimap<> Asszociatív Nem rendezett unordered_set<> unordered_multiset<> unordered_map<> unordered_multimap<> Az adatokat egy kulccsal azonosítva tárolják.

7 Az STL elemek fejállományai Leggyakoribb elemek Algoritmusok: rendezés, keresés, másolás stb. Asszociatív tárolók: rendezett halmazok (elemismétlődéssel multiset, illetve elemismétlődés nélkül - set) Asszociatív tárolók: kulcs/érték adatpárok kulcs szerint rendezett tárolása 1:1 (map), illetve 1:n (multimap) kapcsolatban Asszociatív tárolók: nem rendezett halmazok (elemismétlődéssel unordered_multiset, illetve elemismétlődés nélkül unordered_set) Asszociatív tárolók: kulcs/érték adatpárok nem rendezett tárolása (elemismétlődéssel unordered_multimap, illetve elemismétlődés nélkül unordered_map) Függvényobjektumok ( function(), bind() ) Iterátorelemek, előre definiált iterátorok, adatfolyam-iterátorok Műveleti elemek, move(), swap(), a pair (adatpár) struktúra Numerikus műveletek a konténerekben tárolt adatokon Soros tároló adapter: verem (statck) Soros tároló adapterek: sor (queue), prioritásos sor (priority_queue) Soros tároló: egydimenziós statikus tömb (array) Soros tároló: egyirányú lineáris lista (forward_list) Soros tároló: kétirányú lineáris lista (list) Soros tároló: kettősvégű sor (deque) Soros tároló: egydimenziós dinamikus tömb (vector) Fejállomány <algorithm> <set> <map> <unordered_set> <unordered_map> <functional> <iterator> <utility> <numeric> <stack> <queue> <array> <forward_list> <list> <deque> <vector>

8 Soros és asszociatív tárolok tulajdonságai mindegyiknek van default és copy (értékekre) konstruktora, = operátora, a.swap(b) tagfüggvénye és swap(a,b) algoritmusa, == és!= operátora (azonos elemek azonos sorrendben), sorrendiség (az első nem azonos elem határozza meg), begin() bejáró a kezdetre (rbegin() a kétirányúnál ), end() bejáró a végére (rend() a kétirányúnál), size() méret, empty() üres? maxsize() maximálisan tárolható elemszám tagok (értékek, referenciák, const referenciák, bejárók (vissza is)), konstans bejárók (vissza is), helyzet-különbségek, méretek)

9 A vector: #include <vector> Elemek sorban (dinamikus tömbökkel megvalósítva) Folytonos adatterületen pointerrel és bejáróval is bejárható Automatikusan növekszik és csökken a tárolási mérete Az elemek könnyen elérhetők pozíció alapján (állandó idővel) Az elemek sorban bejárhatók (lineáris idővel) Elemek illeszthetők/törölhetők a végéről (konstans idővel) Elemek beilleszthetők és törölhetők is, azonban erre mások (deque, list) jobb időt produkálnak Memóriamodell:

10 A vector: #include <vector> Konstruktorok (vector<tip>) // üres tip típusú vektor vector<tip> vektor_0; vector<tip> vektor_0 {}; // db elemű vektor a típus alapértelmezett elemeivel vector<tip> vektor_1 (db); // db elemű vektor ertek elemekkel vector<tip> vektor_2 (db,ertek); // inicializáló lista alapján vector<tip> vektor_3 {init. lista}; // iterátor vektor-ból [begin,end) tartomány átmásolásával vector<tip> vektor_4 (vektor.begin(), vektor.end()); vector<tip> vektor_4 {vektor.begin(), vektor.end()}; // másolás vektor-ból (másoló konstruktor) vector<tip> vektor_5 (vektor); vector<tip> vektor_5 {vektor}; // átmozgatás vektor-ból vector<tip> vektor_5 (move(vektor)); vector<tip> vektor_5 {move(vektor)};

11 A vector: #include <vector> Bejárók (vector<tip>::iterator) vector<tip>::iterator v; // iterátora begin() // kezdet end() // vég vector<tip>::reverse_iterator rv; // fordított irányú iterátor rbegin() // vissza kezdet rend() // vissza vég &v[0] (*v) v++ rv++ // pointer a memóriára // maga a vektor elem, mintha pointer lenne // következő elemre lépés // fordított irány esetén is ez adja a következő // elemet nem a rv--

12 A vector: #include <vector> Tulajdonságok operator[i], at(i) // az i. elem, at() ellenőriz is front() // az első elem referenciája back() // az utolsó elem referenciája tip* data() // visszaadja az első elem pointerét C++11 Méretek size() resize(n[,val]) capacity() reserve(n) Módosítók push_back(val) pop_back() // az elemek aktuális száma // n-re méretez val [vagy default] elemmel feltöltve // a férőhelyek száma (automatikusan is nő) // a férőhelyek számának növelése n-re // a val az utolsó elem mögé kerül // törli az utolsó elemet és visszatér az értékével // adott pozícióba helyez, nem hatékony iterator insert ( iterator position, const T& x )

13 A vector: #include <vector> Törlés bool empty ( ) const; erase(iterator tol, iterator ig) void clear() // üres-e // tol ig töröl // mindent töröl Keresés (#include <algorithm>) vector<tip>::iterator find(vector< tip>::iterator tol, vector< tip >::iterator ig, tip adat); vector<tip>::iterator search(vector< tip>::iterator tol, vector< tip >::iterator ig, vector< tip >::iterator elemtol, vector< tip >::iterator elemig); bool binary_search(vector< tip>::iterator tol, vector< tip >::iterator ig, tip ert); Műveletek elvégzése elemeken fvtip for_each(vector< tip>::iterator tol, vector< tip >::iterator ig, fvtip fvg);

14 A vector: #include <vector> A konténer elemeinek bejárása iterátorok segítségével: vector<int> vect {20,30,40,50}; vector<int>::iterator v; for (v = begin(vect); v!= vect.end(); v++) cout << *v << endl; v = begin(vect); while(v!= vect.end()) { cout << *(v++) << endl; } for (auto v2 = begin(vect); v2!= vect.end(); v2++) cout << *v2 << endl; //C++11

15 A vector: #include <vector> A konténer elemeinek bejárása iterátorok nélkül: for (auto elem: vect) // csak olvasható C++11 cout << elem << endl; for (auto& elem: vect) // írható/olvasható C++11 elem+=10; A konténer elemeinek bejárása for_each segítségével: void myfunc(int elem) { cout << elem << endl; } // elemeket kiíró függvény vector<int> vect {20,30,40,50}; for_each (vect.begin(), vect.end(), myfunc); //fgv. meghívása az elemekre

16 A vector: #include <vector> Megjegyzések: A beírás elrontja az iterátorokat: vector<int>::iterator beg = vect.begin(); vector<int>::iterator end = vect.end(); vect.push_back(12); vector<int>::iterator p=find(beg, end,12); Szükséges hely bővítése: // elrontja // futási hiba Ha ismert az elemek száma, akkor mindig használjuk a mérettel rendelkező konstruktort, mert ha új elem behelyezésekor elfogy a lefoglalt hely, akkor automatikusa átméreteződik (új helyre másolódik) a tartalom, ez nagy elemszám esetén belassítja a működést. vector<int> vect; for (int i = 0; i < 1000; i++) { vect.push_back(i); // üres vektor kerül bővítésre // bővítés cout << "merete:"<<vect.size()<<" helye:"<<vect.capacity()<< endl; } // másolások száma: 18

17 #include <stdlib.h> #include <vector> #include <algorithm> #include <iostream> using namespace std; void myfunc (int i) { cout << " " << i; } int main(){ vector<int> vect(2,0); vect[0]=1; // a vect adatainak megadása 1 vect[1]=2000; for (int i=0; i<8; i++) // a vect adatainak megadása 2 vect.push_back((i+1)*5); // a vect adatainak kiírása 1 vector<int>::iterator vit; // iterator vectorra for (vit=vect.begin(); vit!=vect.end(); vit++) cout<<*(vit)<<endl; cout<<endl; cout<<"merete:"<<vect.size()<<" helye:"<<vect.capacity()<<endl; //10 13 // a vect adatainak kiírása 2 for (int i=0; i<vect.size(); i++) cout<<vect[i]<<endl; cout<<endl; sort(vect.begin(),vect.end()); // rendező algoritmus // a vect adatainak kiírása 3 C++11 for (auto& elem : vect) cout << elem << endl; cout<<endl; // keresés vector<int>::iterator it = find (vect.begin(), vect.end(), 2000); if (it!= vect.end()) cout << "van: " << *(it) << endl; // a vect adatainak kiírása 4 for_each (vect.rbegin(), vect.rend(), myfunc); // int *p = vect.data(); // az első elemre mutató pointer lekérdezése C++11 return 0;}

18 Az array: #include <array> C típusú tömb osztályba foglalása C++11-ben Létrehozás: array<tip,méret> Elemek sorban meghatározott elemszámmal foglalnak helyet Folytonos adatterületen pointerrel és bejáróval is bejárható Az elemek könnyen elérhetők pozíció alapján (állandó idővel) Az elemek sorban bejárhatók (lineáris idővel) Memóriamodell: Előnye a hagyományos tömbbel szemben, hogy rendelkezik bejáróval és tagfüggvényekkel, valamint alkalmazhatók rá az algoritmusok.

19 Az array: #include <array> Hátránya, hogy függvényeknél a típusnak és a méretnek is egyeznie kell. //Összeg fgv. csak 10 elemű int típusú array-ra double szum(array<int, 10> a) { double szum = 0; for (int i = 0; i < 10; i++) szum += a[i]; return szum; } array<int, 10> tomb; tomb.fill(20); szum(tomb); //eltérő méret esetén fordítási hiba

20 A deque: #include <deque> Kétősvégű sor, amely mindkét végén növelhető Konstans idő alatt adhatunk hozzá, illetve távolíthatunk el elemet a sor végeiről: push_front(val), pop_front() Nem folytonos adatterületen helyezkedik el (nincs capacity() és reserve(n)), egydimenziós tömböt tartalmazó listában tárolódik Az elemek könnyen elérhetők pozíció alapján (állandó idővel) Az elemek sorban bejárhatók (lineáris idővel) Lassabb, mint a sor (queue) Memóriamodell:

21 Az egyszeres láncolatú lista: #include <forward_list> Csak az elején lehet bővíteni: push_front(val) Az elemek nem érhetőek el az indexelés operátorral (nincs [] és at()) Tetszőleges pozícióba beszúrhatunk (insert_after()) és törölhetünk (erase_after()) konstans idő alatt A beszúrás és törlés művelet nem rontja el az iterátorokat Memóriamodell:

22 A list: #include <list> Kétirányban láncolt lista, mindkét végéhez hozzáadhatunk és törölhetünk elemeket Az elemek nem érhetőek el az indexelés operátorral (nincs [] és at()) Tetszőleges pozícióba beszúrhatunk (insert()) és törölhetünk (erase()) konstans idő alatt A beszúrás és törlés művelet nem rontja el az iterátorokat Memóriamodell:

23 A list: #include <list> Tagfüggvényei: lst1.splice(i1,lst2) // lst2 összes elem törlődik és lst1-be // insertálódik i1-től lst1.merge(lst2) // sorba rendezett listák összefésülése lst1.sort() // növekvő sorba rendezés lst1.sort(hasonlító) // sorba rendezés Hasonlító fgv.objektum szerint lst1.revers() // sorrend megfordítása lst1.remove(adat) // minden adat értékű elem törlése lst1.unique() // egymást követő ismétlődő elemek törlése iterator insert (iterator position,const value_type& val); //beszúrás Egyszerű példa: persze: int-el mindig, minden működik Joe list<int> lista1{ 10, 5, 8, 23, 8 }; lista1.sort();// lista1.unique(); // list<int> lista2{ 0, 15, 8, 23, 8 }; lista2.sort(); // lista2.merge(lista1); // lista1 üres lett lista2.insert(lista2.begin(), 34); // lista1.splice(lista1.begin(), lista2); // lista2 üres lett

24 Összetettebb példa: class Auto{ private: string tipus; string rendszam; public: Auto(string tip, string rsz) :tipus(tip), rendszam(rsz){}; void Kiir() const { cout << tipus << "\t" << rendszam << endl; } string Rszam() const {return rendszam;} string Tipus() const {return tipus;} bool operator < (const Auto& masik) const { return tipus < masik.tipus;} bool operator == (const Auto& masik) const { return tipus == masik.tipus;} }; bool AutotHasonlit(const Auto& bal, const Auto& jobb) { //rendező függvény return bal.rszam() < jobb.rszam(); } list<auto> Kocsik{ { "Volvo", "DFR-356" }, { "Renault", "MER-637" } }; Kocsik.push_back(Auto("Opel", "HIK-123")); Kocsik.push_front(Auto("Suzuki", "GDS-145")); Kocsik.push_front(Auto("Suzuki", "GDS-145")); Kocsik.push_front(Auto("Opel", "MKL-785")); list<auto>::iterator it; for (it = Kocsik.begin(); it!= Kocsik.end(); it++) it->kiir(); Kocsik.sort(); // Sorba rendezés az alapértelmezett < operátorral for (it = Kocsik.begin(); it!= Kocsik.end(); it++) it->kiir(); Kocsik.sort(AutotHasonlit); // Sorba rendezés függvénnyel, rendszám alapján for (it = Kocsik.begin(); it!= Kocsik.end(); it++) it->kiir(); Kocsik.unique(); // Azonos elemek törlése == operátorral for (it = Kocsik.begin(); it!= Kocsik.end(); it++) it->kiir();

25 Asszociatív tárolók A hozzáférés nem az elem pozíciója, hanem egy kulcs értéke alapján történik. Rendezett konténer esetén a műveletek általában logaritmikus végrehajtási idejűek Minden lehetséges kulcsérték legalább egyszer előfordul. Léteznek kulcsismétlést megengedő változatok (multiset, multimap), a keresés ebben az esetben lineáris végrehajtási idejű

26 A set #include <set> A tárolt adatokat kulcsként használja set esetén a kulcsoknak egyedinek kell lennie multiset esetén ismétlődhetnek a kulcsok Konstruktorok (set<tip,compare>) set<tip> set_0; // üres (tip1) típusú set tip tomb[]= {t0, t1, t2}; set<tip> set_1(tomb,tomb+3); // iteratív pointerekkel set<tip> set_2(set_1.begin(),set_1.end()); // iterációs létrehozás set<tip> set_3(set_1); // másoló konstruktor // Lehet definiálni az összehasonlítást default: std::less<tip> Bejárók (set<tip>::iterator) begin() // kezdet end() // vég rbegin() // vissza kezdet rend() // vissza vég set<tip>::iterator m; (*m) // maga az elem, mintha pointer lenne

27 A set #include <set> Méretek size() max_size() Módosítók insert(iterator,const tip & x); Törlés bool empty ( ) const; erase(iterator tol, iterator ig) clear() Keresések (#include <algorithm>) NINCS operator[] // az elemek aktuális száma // az elemek maximális száma // beszúr // üres-e // tol ig töröl // mindent töröl set<tip>::iterator find(const tip& x); // az adott kulcsú elem size_type count ( const key_type& x ) const; //adott elem száma pair<itb,ite> equal_range ( const key_type& x ); //adott kulcsú elem tartománya iterator lower_bound ( const key_type& x ); // nem kisebb, mint x elem iterátora iterator upper_bound ( const key_type& x ); // nagyobb, x elem iterátora

28 A set #include <set> Tárolása bináris fájlként történik Elem beszúrása: 7 ->

29 A set #include <set> Példák: set<int> set_0; int tomb[] = { 8, 3, 10, 1 }; set<int> set_1(tomb, tomb + 4); set<int> set_2(set_1.begin(), set_1.end()); set<int> set_3(set_1); // üres (int) típusú set // iteratív pointerekkel // iterációs létrehozás // másoló konstruktor set<int>::iterator it_s; for (it_s = set_1.begin(); it_s!= set_1.end(); it_s++) // set elemek kiírása cout << " " << *it_s; // cout << endl; cout << "size:" << set_1.size() << endl; // meret 4 cout << "maxsize:" << set_1.max_size() << endl; // max meret set_1.insert(set_1.begin(), 6); // beilleszt az 1. helyre for (it_s = set_1.begin(); it_s!= set_1.end(); it_s++) cout << (*it_s) << endl; // if (set_1.find(10)!= end(set_1)) // tartalmaz 10-et cout << set_1.count(10) << " db. 10-es" << endl; // 1 db. 10-es pair<set<int>::iterator,set<int>::iterator> par = set_1.equal_range(20); cout<<"a 6-nal nem kisebb kulcsu elem:"<<(*par.first) << endl; //6 cout<<"a 6-nal nem kisebb kulcsu elem:"<<(*set_1.lower_bound(20)) << endl; //6 cout<<"a 6-nal nagyobb kulcsu elem:"<<(*par.second) << endl; //8 cout<<"a 6-nal nagyobb kulcsu elem:"<<(*set_1.upper_bound(20)) << endl; //8

30 A set #include <set> #include <iostream> #include <vector> #include <algorithm> #include <set> #include <functional> using namespace std; int tomb[] = { 5,6,7,7,6,5,5,6 }; vector<int> v(tomb, tomb + 8); // sort(v.begin(), v.end()); // vector<int>::iterator also, felso; also = lower_bound(v.begin(), v.end(), 6); felso = upper_bound(v.begin(), v.end(), 6); cout << "6 also hatar poz.: " << (also - v.begin()) << endl;// 3 cout << "6 felso hatar poz.: " << (felso - v.begin()) << endl;// 6 multiset<int, greater<int>> ms(tomb, tomb + 8); // multiset<int, greater<int>>::iterator malso, mfelso; malso = ms.lower_bound(6); mfelso = ms.upper_bound(6); cout << "6 also hatar poz.: " << distance(ms.begin(), malso) << endl;// 2 cout << "6 felso hatar poz.: " << distance(ms.begin(), mfelso) << endl;// 5

31 A set #include <set> Saját adattípus, vagy osztály esetén meg kell adni a rendezést : 1. Függvény pointerrel: multiset<auto, bool(*) (const Auto &, const Auto &)> Autok(AutotHasonlit); 2. Osztálysablon alapján: (#include <functional>) multiset<auto, less<auto>> Autok; //operátor < alapján 3. Függvényobjektum alkalmazásával: struct Rendez { bool operator () (const Auto & bal, const Auto & jobb) { return bal.rszam() < jobb.rszam();} }; multiset<auto, Rendez> Autok; Autok.insert(Auto("Opel", "HIK-123")); Autok.insert(Auto("Suzuki", "GDS-145")); Autok.insert(Auto("Renault", "MER-637")); Autok.insert(Auto("Opel", "HIK-123")); for (auto it2 = Autok.begin(); it2!= Autok.end(); it2++) it2->kiir(); //Auto(*it).Kiir();

32 A map #include <map> Adatpárok tárolódnak (kulcs, érték), a pair sablon alapján first -> kulcs second -> adat template <class T1, class T2> struct pair { T1 first; T2 second; pair() : first(t1()), second(t2()) {} }; A map elemei a kulcs alapján rendezettek A multimap esetén megengedett a kulcsismétlés

33 A map #include <map> Konstruktorok (map<tip1,tip2,compare>) map<tip1,tip2> map_0; // üres (tip1,tip2) típusú map map<tip1,tip2> map_1(map_0.begin(),map_0.end()); // iterációs létrehozás map<tip1,tip2> map_2(map_1); // másoló konstruktor // Lehet definiálni az összehasonlítást kulcsra és értékre is Bejárók (map<tip1,tip2>::iterator) begin() // kezdet end() // vég rbegin() // vissza kezdet rend() // vissza vég map<tip1,tip2> ::iterator m; // maga az elem, mintha pointer lenne (*m).first a kulcs m->second - az érték Tulajdonságok operator[] // az adott kulcsú elem, ha nem létezik létrehozza a kulcsot érték nélkül

34 Keresések (#include <algorithm>) map<tip1,tip2>::iterator find(const tip1& x); size_type count ( const key_type& x ) const; pair<itb,ite> equal_range ( const key_type& x ); //adott kulcsú elem tartománya iterator lower_bound ( const key_type& x ); // nem kisebb, x kulcsú elem it. iterator upper_bound ( const key_type& x ); // nagyobb, x kulcsú elem it. A map #include <map> Méretek size() max_size() // az elemek aktuális száma // az elemek maximális száma Módosítók insert(iterator,pair<tip1,tip2>(kulcs,ertek)); Törlés bool empty ( ) const; // üres-e erase(iterator tol, iterator ig) // tol ig töröl clear() // mindent töröl

35 Példák: A map #include <map> map<char,int> map_0; // az alap konstruktor map<char,int>::iterator m0_it; // iterátor map_0['c']=99; map_0['b']=98; map_0['a']=97; map_0['d']=100;// feltöltés m0_it=map_0.begin(); cout<<m0_it->first<<endl; // az első elem kulcsa - a cout<<(*m0_it).second<<endl; // az első elem értéke - 97 map<char,int> map_1 (map_0.begin(),map_0.end()); // iteratív feltöltés map<char,int> map_2 (map_1); // másoló konstruktor for (m0_it=map_0.begin(); m0_it!=map_0.end(); m0_it++) // a map elemek kiírása cout<<(*m0_it).first<<" : "<<(*m0_it).second<<endl; // a : 97, b : 98 cout<<"size:"<<map_0.size()<<endl; // a méret 4 cout<<"maxsize:"<<map_0.max_size()<<endl; // a maximális méret m0_it=map_0.begin(); map_0.insert(m0_it,pair<char,int>('a',65)); // beszúrás for (m0_it=map_0.begin(); m0_it!=map_0.end(); m0_it++) // cout<<(*m0_it).first<<" : "<<(*m0_it).second<<endl; // A : 65, a: 97, cout<<map_0.count('a')<< " db. a kulccsal"<<endl; // 1 cout<<"a legkisebb 'a' kulcsu elem:" <<(*map_0.lower_bound('a')).second<<endl; // 97 cout<<"az 'a' kulcsu elem felso hat:" <<(*map_0.upper_bound('a')).second<<endl; // 98

36 A map #include <map> map<char, string> Morse; Morse['A'] = ".-"; Morse['N'] = "-."; Morse['1'] = ".----"; Morse['B'] = "-..."; Morse['O'] = "---"; Morse['2'] = "..---"; Morse['C'] = "-.-."; Morse['P'] = ".--."; Morse['3'] = "...--"; Morse['D'] = "-.."; Morse['Q'] = "--.-"; Morse['4'] = "...-"; Morse['E'] = "."; Morse['R'] = ".-."; Morse['5'] = "..."; Morse['F'] = "..-."; Morse['S'] = "..."; Morse['6'] = "-..."; Morse['G'] = "--."; Morse['T'] = "-"; Morse['7'] = "--..."; Morse['H'] = "..."; Morse['U'] = "..-"; Morse['8'] = "---.."; Morse['I'] = ".."; Morse['V'] = "...-"; Morse['9'] = "----."; Morse['J'] = ".---"; Morse['W'] = ".--"; Morse['0'] = "-----"; Morse['K'] = "-.-"; Morse['X'] = "-..-"; Morse['L'] = ".-.."; Morse['Y'] = "-.--"; Morse['M'] = "--"; Morse['Z'] = "--.."; string input = "SOS Korszeru Informatika"; for (int i = 0; i< input.length(); i++) cout << Morse[toupper(input[i])];

37 Rendezetlen asszociatív tárolók A set, multiset, map, multimap tárolók rendezetlen megfelelői. (unordered_set, unordered_map ) Az elemeket egy hasító függvény alapján osztják szét halmokra. Az elemeket a hasító tábla alapján érjük el. Például: szám % halom jön létre A beépített alaptípusok mindegyikének van egy hasító függvénye. Saját adattípus esetén a hasító és az összehasonlító függvényeket nekünk kell elkészíteni. hash<auto>(const Auto & obj); // hasító fgv. equals_to<auto>(const Auto & obj1, const Auto & obj2); // == operátor vagy fgv. objektum

38 Példák: Az unordered_set #include <unordered_set> struct AutoHasher //Hasító fgv. objektum { size_t operator()(const Auto & obj) const { return hash<string>()(obj.tipus()); // Típusból képzett hasító fgv. } }; struct AutoComparator //Összehasonlító fgv. objektum { bool operator()(const Auto & obj1, const Auto & obj2) const { return obj1.rszam() == obj2.rszam(); // Rendszámok egyezése } }; unordered_set<auto,autohasher,autocomparator> usetautok; usetautok.insert(auto("opel", "HIK-123")); usetautok.insert(auto("suzuki", "GDS-145")); usetautok.insert(auto("renault", "MER-637")); usetautok.insert(auto("opel", "FGH-578")); usetautok.insert(auto("opel", "HIK-123")); //azonos rendszám miatt nem kerül be for (auto it2 = usetautok.begin(); it2!= usetautok.end(); it2++) it2->kiir();

39 Tároló adapterek vector<> deque<> list<> Soros Tároló Tároló adapter stack<> queue<> priority_queue<> Soros tárolókra épülő osztálysablonok, melyek egyszerű kezelésű adatstruktúrákat valósítanak meg. Az adapterek elemein nem lehet végiglépkedni, ezért nem használhatóak rajtuk az algoritmusok sem.

40 A stack #include <stack> Last-in, first-out, LIFO működést valósít meg Adaptálható deque,vector, list konténerekre építve (amiknek van back(), push_back() és pop_back() művelete). top() verem pop() push()

41 A stack #include <stack> Konstruktorok (stack<tip, tarolo<tip>>) stack<tip,vector<tip> > stack_0; // üres stack vector-t használ vector<tip> vek (2,200); // vektor 2 elemmel stack<tip,vector<tip> > stack_1 (vek); // stack vektorral inicializálva Kezelés bool empty ( ) const void push(const tip & x) void pop() tip & top() size_type size() const // üres-e // a stack-be tölt // leveszi a felső elemet // visszaadja a felső elemet // a méret; Példák stack<int,vector<int> > stack_0; // üres stack vector-t használ vector<int> vek (2,200); // vektor 2 elemmel stack<int,vector<int> > stack_1 (vek); // stack vektorral inicializálva for (int i=1; i<5; i++) stack_1.push(i);// tölti az elemeket for (int i=1; i<3; i++){ cout<<stack_1.top()<<endl; // kiírja és stack_1.pop(); // leveszi a felsőt } cout<<stack_1.size()<<endl; // a meret 4 (2+4-2)

42 A stack #include <stack> Mi a kimenet? int szam = 11; stack<int> verem; while (szam > 0) { verem.push(szam % 2); szam /= 2; } while(!verem.empty()) { cout << verem.top(); verem.pop(); }

43 A queue #include <queue> First-in, first-out, FIFO működésű sort valósít meg Adaptálható deque vagy list konténerekre építve (amiknek van front(), back(), push_back() és pop_front() művelete). Az alapműveletek mindegyikéhez konstans idő szüksége back() front() push() sor pop()

44 A queue #include <queue> Konstruktorok (queue<tip, tarolo<tip>>) queue<tip,list<tip>> que_0; // üres queue list-t használ list<tip> lst (2,200); // list 2 elemmel queue<tip,list<tip>> que_1 (lst); // queue list-tel inicializálva Kezelés bool empty ( ) const; // üres-e void push(const tip & x) // a queue végére tölt void pop() // leveszi a legrégebbi elemet tip & front() // visszaadja a legújabb elemet tip & back() // visszaadja a legrégebbi elemet size_type size() const // a méret; Példák list<int> lst (2,200); // lista 2 elemmel queue<int,list<int>> que_1 (lst); // queue list-tel inicializálva queue<int,deque<int>> que_0; // üres queue deque-t használ for (int i=1; i<10; i++) que_0.push(i); // tölti az elemeket for (int i=1; i<4; i++){ cout<<que_0.front()<<endl; // que_0.pop(); // leveszi a felsőt } cout<<que_0.size()<<endl; // 6 (9-3)

45 A priorty_queue #include <queue> Best-in, first-out, BIFO működésű sort valósít meg, ahol a legjobb a legnagyobb prioritású elem Adaptálható vector vagy deque konténerekre építve Az elsőbbséget egy rendezési előírás definiálja A sor elején mindig a legnagyobb prioritású elem helyezkedik el top() prioritásos sor pop()

46 A priorty_queue #include <queue> Konstruktorok (priority_queu<tip, tarolo<tip>, class Compare>) priority_queu<tip,vector<tip>> pque_0; // üres p_queue vector-ral vector<int> v{ 1, 34, 43, 20 }; // vector elemekkel priority_queue<int, vector<int>> pque_1(v.begin(), v.end()); Kezelés bool empty ( ) const; // üres-e void push(const tip & x) // a queue végére tölt void pop() // leveszi a legrégebbi elemet tip & front() // visszaadja a legújabb elemet size_type size() const // a méret; Példák priority_queue<int, vector<int>> psor; // üres prioritási sor vector-ra psor.push(100); // feltöltés psor.push(20); psor.push(200); while (!psor.empty()) { cout << psor.top() << endl; // kiíratás psor.pop(); // leveszi a felsőt }

47 Segítség a konténer választáshoz: Forrás: Tóth Bertalan: C++ programozás STL konténerekkel

48 Iterátorok #include <iterator> Az adathalmaz bejárására alkalmas objektumok. Egy pozíciót határoz meg a tárolóban. Forrás: Tóth Bertalan: C++ programozás STL konténerekkel

49 Iterátorok #include <iterator> Iterátorokra alkalmazható függvénysablonok: begin(), end() C tömbre készít bejárót advance(n) előre mozgat n lépéssel distance(itb, ite) két iterátor közötti elemek száma next(it) egyel lépteti előre az iterátort prev(it) egyel visszalépteti az itereátort next(it,n), prev(it,n) n szer léptet előre/vissza

50 Input és Output iterátorok #include <iterator> istream_iterator: a konténer elemeinek beolvasására használható: vector<double> adatok(3, 0); cout << "Kerek 3 szamot: "; istream_iterator<double> polvaso(cin); for (int i = 0; i < 3; i++) { adatok[i] = *polvaso; if (i < 2) polvaso++; } for (double elem : adatok) cout << elem << "\t";

51 Input és Output iterátorok #include <iterator> ostream_iterator: a kimeneti adatfolyam használatával kiíratások végezhetők el az algoritmusokból vector<double> adatok(3, 0); cout << "Kerek 3 szamot: "; istream_iterator<double> polvaso(cin); for (int i = 0; i < 3; i++) { adatok[i] = *polvaso; if (i < 2) polvaso++; } copy(begin(adatok), end(adatok), ostream_iterator<double>(cout, "\t"));

52 Algoritmusok #include <algorithm> Globális függvénysablonok, amelyek iterátorok segítségével férnek hozzá a konténerben tárolt adatokhoz Az algoritmusok függetlenek a konténerektől, az iterátorok feladata ismerni a konténert Ha a tároló valamilyen algoritmus saját tagfüggvénnyel is meg tud valósítani, akkor célszerű inkább azt használni (hatékonyabb és biztonságosabb) A végrehajtott algoritmus működési eredményét többféleképpen is megkaphatjuk Konténerben Iterátorként Adatként

53 Algoritmusok #include <algorithm> Nem módosító algoritmusok: nem változtatják meg az elemeket, sem azok tárolási sorrendejét equal(), find(), for_each(), max(), min(), mismatch(), search() Módosító algoritmusok: copy(), fill(), for_each(), merge(), move(), replace(), swap(), transform() Eltávolító algoritmusok: elemek törlésére remove(), unique() Átalakító algoritmusok: elemsorrend megváltoztatáshoz partition(), reverse(), rotate() Rendező algoritmusok: partition(), sort() Rendezett tartomány algoritmusai: binary_search(), equal_range(), lower_bound(), upper_bound(), merge()

54 Függvényobjektumok Az algoritmusok működése testre szabható, meghatározhatjuk, hogy milyen művelet hajtódjon végre az elemeken Hagyományos függvénymutató is lehet, de legtöbbször objektum A függvényobjektum olyan típus, amely megvalósítja a függvényhívás () operátorát Létezik egyoperandusú (unary) és kétoperandusú (binary) függvényobjektum

55 Függvényobjektumok Hagyományos függvény: bool Paros(int x){ return (x % 2) == 0; } Functional: #include <functional> class Paros{ public: bool operator () (int x) const{ return (x % 2) == 0; } } p1; bool x = p1(1); //mintha függvény lenne

56 Függvényobjektumok void Novel(double &elem){ elem++;} struct Osszeg{ Osszeg(double osszeg = 0):osszeg(osszeg) { } void operator()(double szam){ osszeg += szam; } double osszeg; }; vector<double> szamok{ 2, 3, 6, 9, 35 }; for (double e : szamok) cout << e <<" "; cout << endl; //függvény for_each(begin(szamok), end(szamok), Novel); for (double e : szamok) cout << e <<" "; cout << endl; //függvény obj. Osszeg szum=for_each(begin(szamok), end(szamok), Osszeg()); cout << szum.osszeg<< endl;

57 Függvényobjektumok (C++98) Unáris függvény: template <class Arg, class Result> struct unary_function { typedef Arg argument_type; typedef Result result_type; }; Példa: class fact: public unary_function<int, long> { public: long operator () (int a) { long f=1; for (int i=2; i<=a; i++) f*=i; return f; } };

58 Függvényobjektumok (C++98) Bináris függvény: template <class Arg1, class Arg2, class Result> struct binary_function { typedef Arg1 first_argument_type; typedef Arg2 second_argument_type; typedef Result result_type; }; Példa: template <class T> struct plus : binary_function <T,T,T> { T operator() (const T& x, const T& y) const { }; } return x+y;

59 Függvényobjektumok C++11-ben leegyszerűsítették: class Negyzet{ public: int operator() (int a) { return a*a; }; } int init[3] = {3,5,7}; deque<int> f(init, end(init)); // vége: init +3 vector<int> c(5); // üres vektor // a deque elemek négyzete transform(f.begin(), f.end(), c.begin(), Negyzet()); for (deque<int>::iterator i=f.begin(); i<f.end(); i++) cout<<(*i)<<" "; // cout<<endl; for (vector<int>::iterator i=c.begin(); i<c.end(); i++) cout<<(*i)<<" "; // cout<<endl;

60 Függvényobjektumok Általánosítva: template <class T> class Negyzet{ public: T operator() (T a) { return a*a; }; } int init[3] = {3,5,7}; deque<int> f(init, end(init)); // vége: init +3 vector<int> c(5); // üres vektor // a deque elemek négyzete transform(f.begin(), f.end(), c.begin(), Negyzet<int>()); for (deque<int>::iterator i=f.begin(); i<f.end(); i++) cout<<(*i)<<" "; // cout<<endl; for (vector<int>::iterator i=c.begin(); i<c.end(); i++) cout<<(*i)<<" "; // cout<<endl;

61 Függvényobjektumok Kétoperandusú esetben (binary function): template <class T> class Add{ public: T operator() (T a, T b) { return a+b; } }; double A[5]={ 2, 3, 6, 9, 35 }; vector<double> B(5); fill(b.begin(), B.end(), 10); deque<double> C(5); transform(begin(a), end(a), B.begin(), C.begin(), Add<double>()); for (double e : C) cout << e << " "; cout << endl; //

62 Függvényobjektumok Előre definiált függvényobjektumok: #include <functional> int adatok[5] = { 35, 1, 3, 12, 23 }; sort(begin(adatok), end(adatok), greater<int>()); // vector<int> B(5); vector<int> C(5); iota(begin(b), end(b), 1);// transform(begin(adatok), end(adatok), B.begin(), C.begin(), plus<int>()); for (double e : C) cout << e << " "; cout << endl; //

63 Függvényobjektumok Alkalmazhatunk lambda-kifejezéseket is, amelyek névtelen függvényobjektumok vector<double> szamok{ 2, 3, 6, 9, 35 }; list<double> lista(5); for (double e : szamok) cout << e <<" "; cout << endl; for_each(begin(szamok), end(szamok), [](double &x)-> double {return x*x; }); double szum = 0; for_each(begin(szamok), end(szamok), [&szum](double x){szum += x; }); cout << szum << endl; transform(szamok.begin(), szamok.end(), lista.begin(), [](double x) -> double{ return x*x; }); for_each(lista.begin(), lista.end(), [](double x){cout << x << " "; });

64 Összetettebb példa: class Hallgato { public: Hallgato(string nev,string neptun,int kor=19):nev(nev),neptun(neptun),kor(kor) {} string Nev() const { return nev; } string Neptun() const { return neptun; } int Kor() const { return kor; } bool operator < (const Hallgato & h) { return nev < h.nev; } private: string nev, neptun; int kor; }; deque<hallgato> Tankor; Tankor.push_back(Hallgato("Kiss Petra", "B0SIFJ")); Tankor.push_back(Hallgato("Nagy Peter", "FG45TH")); Tankor.push_back(Hallgato("Kovacs Vilmos", "ASA47G")); Tankor.push_back(Hallgato("Molnar Kata", "DFRH7K")); string nev = "Kiss Petra"; bool KeresNev(const Hallgato & a) { return a.nev() == nev; } deque<hallgato>::iterator di; di = find_if(tankor.begin(), Tankor.end(), KeresNeptun("FG45TH")); if (di!= Tankor.end()) cout << di->nev() << endl; class KeresNeptun { public: string neptun; KeresNeptun(string neptun) { this->neptun = neptun; } bool operator ()(const Hallgato & h) { return neptun == h.neptun(); } }; string nept = "DFRH7K"; di = find_if(tankor.begin(), Tankor.end(), [nept](hallgato &h) -> bool {return h.neptun() == nept; }); if (di!= Tankor.end()) cout << di->nev() << endl;

65 Ismétlés Mi a kimenet? int tomb[] = { 5,6,7,7,6,5,5,6 }; deque<int> v(tomb + 2, tomb + 8); sort(v.begin(), v.end()); v.empty(); v.push_front(8); for (auto elem : v) elem += 10; deque<int>::reverse_iterator it = v.rbegin(); while (it!= v.rend() - 1) { cout << *it << " "; it++; }

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

XIII. STL. Tároló Bejáró Algoritmus. XIII.1 A vector #include <vector> #include <vector> #include <algorithm> using namespace std; XIII. STL Tároló Bejáró Algoritmus #include #include using namespace std; vector vect; // a vect adatainak megadása sort(vect.begin(),vect.end()); XIII.1 A vector #include

Részletesebben

Fejlett programozási nyelvek C++ Iterátorok

Fejlett programozási nyelvek C++ Iterátorok 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

Részletesebben

C++ Standard Template Library (STL)

C++ Standard Template Library (STL) Programozási Nyelvek és Fordítóprogramok Tanszék Programozási Nyelvek I. Témák 1 STL alapok 2 STL fogalmak 3 Konténerek 4 Iterátorok 5 Funktorok C++ STL Ne fedezzük fel újra spanyolviaszt! Sok adatszerkezet/algoritmus

Részletesebben

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

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók 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)

Részletesebben

Bevezetés a programozásba 2

Bevezetés a programozásba 2 Bevezetés a programozásba 2 7. Előadás: STL konténerek, sablonok http://digitus.itk.ppke.hu/~flugi/ Vector int int main() { vector v(10); int int sum=0; for for (int i=0;i

Részletesebben

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

C++11 TÓTH BERTALAN C++ PROGRAMOZÁS STL KONTÉNEREKKEL C++11 TÓTH BERTALAN C++ PROGRAMOZÁS STL KONTÉNEREKKEL Tóth Bertalan: C++ programozás STL konténerekkel 2016 Jelen dokumentumra a Creative Commons Nevezd meg! Ne add el! Ne változtasd meg! 3.0 Unported

Részletesebben

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

Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library) Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 12. előadás (Standard Template Library) 2014.05.19. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

500. AA Megoldó Alfréd AA 500.

500. AA Megoldó Alfréd AA 500. Programozás alapjai 2. NZH 2010.05.13. gyakorlat: / Hiány:0 ZH:0 MEGOLD IB.027/51. Hftest: 0 Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden

Részletesebben

500. CC Megoldó Alfréd CC 500.

500. CC Megoldó Alfréd CC 500. Programozás alapjai 2. PótZH 2010.05.20. gyakorlat: G1/IB.146 Hiány:3 ZH:7,71 MEGOLD SCH/500. Hftest: 0 ZHp: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

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

Programozás II gyakorlat. 8. Operátor túlterhelés Programozás II gyakorlat 8. Operátor túlterhelés Kezdő feladat Írjunk egy Vector osztályt, amely n db double értéket tárol. A konstruktor kapja meg az elemek számát. Írj egy set(int idx, double v) függvényt,

Részletesebben

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

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1 STL gyakorlat C++ Izsó Tamás 2016. május 9. Izsó Tamás STL gyakorlat/ 1 Komponensek kapcsolata Deklarálja az alábbi osztálydiagramon szereplő osztályok közül az A, AA és AB osztályokat! A konstruktorokat

Részletesebben

500. DD Megoldó Alfréd DD 500.

500. DD Megoldó Alfréd DD 500. Programozás alapjai 2. (inf.) zárthelyi 2009.05.21. gyakorlat: / Érdemjegy: QBX734 () IB319/32. Hftest: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

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

.Net adatstruktúrák. Készítette: Major Péter .Net adatstruktúrák Készítette: Major Péter Adatstruktúrák általában A.Net-ben számos nyelvvel ellentétben nem kell bajlódnunk a változó hosszúságú tömbök, listák, sorok stb. implementálásával, mert ezek

Részletesebben

Programozási technológia

Programozási technológia Programozási technológia Generikus osztályok Gyűjtemények Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Generikus osztályok Javaban az UML paraméteres osztályainak a generikus (sablon) osztályok felelnek

Részletesebben

Generikus Típusok, Kollekciók

Generikus Típusok, Kollekciók Generikus Típusok, Kollekciók Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Generikus Típusok, Kollekciók 2013 1 / 26 Tartalomjegyzék 1 Enumeráció 2 Generikus Típusok 3 Kollekciók System.Collections

Részletesebben

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?

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? 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? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"

Részletesebben

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.

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 alapjai 2. (inf.) pót zárthelyi 2014.05.22. gyak. hiányzás: 2 n/kzhp: n/11,5 ABCDEF IB.028/2. Hftest: 4 (2,4p) Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot,

Részletesebben

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

Fejlett programozási nyelvek C++ Sablonok és adatfolyamok Fejlett programozási nyelvek C++ Sablonok és adatfolyamok 11. előadás Antal Margit 2009 slide 1 Témakörök Sablonok Függvénysablon Osztálysablon Sablon metaprogramozás Adatfolyamok Operátorok és manipulátorok

Részletesebben

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

A C++ Standard Template Library rövid összefoglalás A C++ Standard Template Library rövid összefoglalás 2016-17. 1 Miről is van szó Alább összefoglaljuk, amely ismeretét feltesszük a félév során. Mivel mint megszokott az egyes verziók több-kevesebb mértékben

Részletesebben

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Tömb Ugyanolyan típusú elemeket tárol A mérete előre definiált kell legyen és nem lehet megváltoztatni futás során Legyen n a tömb mérete. Ekkor:

Részletesebben

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

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon 1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (

Részletesebben

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

Generikus osztályok, gyűjtemények és algoritmusok Programozási, gyűjtemények és algoritmusok bejárása Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 bejárása 2 bejárása 2 Java-ban és UML-ben bejárása Az UML-beli paraméteres osztályok a Java

Részletesebben

C++ Standard Template Library

C++ Standard Template Library Haladó C++, 1/ 78 C++ Standard Template Library Pataki Norbert 2014. április 2. Haladó C++, 2/ 78 Generic programming, generikus programozás Expression problem OOP vs. generic programming Párhuzamos bővíthetőség

Részletesebben

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

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 A lista eleme 0 adat rész mutató rész Listaelem létrehozása p: Node 0 0 3 0 Az elemet nekünk kell bef zni a listába Deklarálás struct Node { int int value; Node* next; next; adattagok Létrehozás Node*

Részletesebben

1. Bevezetés A C++ nem objektumorientált újdonságai 3

1. Bevezetés A C++ nem objektumorientált újdonságai 3 Előszó xiii 1. Bevezetés 1 2. A C++ nem objektumorientált újdonságai 3 2.1. A C és a C++ nyelv 3 2.1.1. Függvényparaméterek és visszatérési érték 3 2.1.2. A main függvény 4 2.1.3. A bool típus 4 2.1.4.

Részletesebben

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 9. gyakorlat Intelligens tömbök, mátrixok, függvények Surányi Márton PPKE-ITK 2010.11.09. C++-ban van lehetőség (statikus) tömbök használatára ezeknek a méretét fordítási időben

Részletesebben

117. AA Megoldó Alfréd AA 117.

117. AA Megoldó Alfréd AA 117. Programozás alapjai 2. (inf.) pót-pótzárthelyi 2011.05.26. gyak. hiányzás: kzhpont: MEG123 IB.028/117. NZH:0 PZH:n Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

Challenge Accepted:C++ Standard Template Library

Challenge Accepted:C++ Standard Template Library Challenge Accepted: C++ Standard Template Library ELTE Informatikai Kar, Programozási Nyelvek és Fordítóprogramok Tanszék patakino@elte.hu Szakmai Esti Mesék C++ Standard Template Library Felépítése konténerek:

Részletesebben

128. AA Megoldó Alfréd AA 128.

128. AA Megoldó Alfréd AA 128. Programozás alapjai 2. PótZH 2010.05.20. gyakorlat: Hiány:0 ZH: MEGOLD SEHOL/5. Hftest: 0 ZHp: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden

Részletesebben

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

Programozás II. 4. Dr. Iványi Péter Programozás II. 4. Dr. Iványi Péter 1 inline függvények Bizonyos függvények annyira rövidek, hogy nem biztos hogy a fordító függvényhívást fordít, hanem inkább az adott sorba beilleszti a kódot. #include

Részletesebben

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája Adatszerkezetek Összetett adattípus Meghatározói: A felvehető értékek halmaza Az értékhalmaz struktúrája Az ábrázolás módja Műveletei Adatszerkezet fogalma Direkt szorzat Minden eleme a T i halmazokból

Részletesebben

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

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása. Feladat Készítsen egy egész számokat tartalmazó zsák típust! A zsákot dinamikusan lefoglalt tömb segítségével ábrázolja! Implementálja a szokásos műveleteket (elem betevése, kivétele, üres-e a halmaz,

Részletesebben

1.AA MEGOLDÓ BERCI AA 1.

1.AA MEGOLDÓ BERCI AA 1. Programozás alapjai 2. (inf.) 2. zárthelyi 2015.05.07. gyak./lab. hiányzás: 3/2 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra írt megoldásokat

Részletesebben

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

Objektum elvű alkalmazások fejlesztése. Verem típus osztály-sablonja Objektum elvű alkalmazások fejlesztése Verem típus osztály-sablonja Készítette: Gregorics Tibor Készítsünk olyan újra-felhasználható kódot, amellyel vermeket lehet létrehozni és használni. Egy verem-objektum

Részletesebben

1. Alapok. Programozás II

1. Alapok. Programozás II 1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph

Részletesebben

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

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 Keresés Rendezés Feladat 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 2016. november 7. Farkas B., Fiala

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

.AA Megoldó Alfréd AA.

.AA Megoldó Alfréd AA. Programozás alapjai 2. (inf.) pót zárthelyi 2013.05.23. gyak. hiányzás: kzh: ZH:0 ABCDEF MEG/200. Hftest: (p) Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

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

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 Programozás alapjai C nyelv 8. gyakorlat Szeberényi mre BME T Programozás alapjai. (C nyelv, gyakorlat) BME-T Sz.. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény

Részletesebben

228. AA Default Konstruktor AA 228.

228. AA Default Konstruktor AA 228. Programozás alapjai 2. (inf.) zárthelyi 2012.05.17. gyak. hiányzás: kzhpont: ABCDEF Q-II/107. nzh: Hftest: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

503.AA Megoldo Arisztid 503.A

503.AA Megoldo Arisztid 503.A Programozás alapjai 2. (inf.) 2. ZH 2017.04.27. gy./l. hiány: / ABCD123 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra írt megoldásokat értékeljük!

Részletesebben

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

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I. Keresés Rendezés Feladat Keresés Rendezés Feladat Tartalom 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

Részletesebben

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

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 11. előadás 2014.05.12. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Adatszerkezetek

Részletesebben

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

Programozás. C++ típusok, operátorok. Fodor Attila Programozás C++ típusok, operátorok Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. március 4. Deklaráció és definíció C++

Részletesebben

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.

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. Érdi Gerg EF II. 2/2. Feladat Készítsen egy zsák típust! lkalmazzon osztályt! zsákokat rendezett láncolt listával ábrázolja! Implementálja a szokásos m veleteket, egészítse ki az osztályt a kényelmes és

Részletesebben

Dinamikus láncolt lista 4. GYAKORLAT

Dinamikus láncolt lista 4. GYAKORLAT Dinamikus láncolt lista 4. GYAKORLAT Szekvenciális adatszerkezet A szekvenciális adatszerkezet olyan rendezett pár, amelynél az R reláció tranzitív lezártja teljes rendezési reláció. Szekvenciális

Részletesebben

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

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism) Programozás alapjai C nyelv 8. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény

Részletesebben

Collections. Összetett adatstruktúrák

Collections. Összetett adatstruktúrák Collections Összetett adatstruktúrák Collections framework Előregyártott interface-ek és osztályok a leggyakoribb összetett adatszerkezetek megvalósítására Legtöbbször módosítás nélkül használhatók Időt,

Részletesebben

Maximum kiválasztás tömbben

Maximum kiválasztás tömbben ELEMI ALKALMAZÁSOK FEJLESZTÉSE I. Maximum kiválasztás tömbben Készítette: Szabóné Nacsa Rozália Gregorics Tibor tömb létrehozási módozatok maximum kiválasztás kódolása for ciklus adatellenőrzés do-while

Részletesebben

Alkalmazott modul: Programozás 9. előadás. Strukturált programozás: dinamikus adatszerkezetek

Alkalmazott modul: Programozás 9. előadás. Strukturált programozás: dinamikus adatszerkezetek Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás 9. előadás Strukturált programozás: dinamikus adatszerkezetek Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

C++ Gyakorlat jegyzet 10. óra.

C++ Gyakorlat jegyzet 10. óra. C++ Gyakorlat jegyzet 10. óra. A jegyzetet Umann Kristóf készítette Brunner Tibor és Horváth Gábor gyakorlatán. (2017. január 6.) 1. Iterátor kategóriák Korábban már elhangzott, hogy az általunk implementált

Részletesebben

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

Programozás II. 6.Öröklés Dr. Iványi Péter Programozás II. 6.Öröklés Dr. Iványi Péter 1 Öröklés Programozók lusta emberek, nem szeretnék valamit kétszer leírni Miért veszélyes? Nem hatékony Újra kell tárolni a kódot, újra le kell fordítani Karbantartás

Részletesebben

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET Szerkesztette: Balogh Tamás 2013. április 12. Ha hibát találsz, kérlek jelezd a info@baloghtamas.hu e-mail címen! Ez a Mű a Creative Commons Nevezd meg! -

Részletesebben

S02-3 Multiparadigma programozás és Haladó Java 2

S02-3 Multiparadigma programozás és Haladó Java 2 S02-3 Multiparadigma programozás és Haladó Java 2 Tartalom 1. Generikus programozás, típussal való paraméterezés, példányosítás és típustörlés 2. A C++ standard template könyvtár. 1. Konténerek és iterátorok

Részletesebben

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

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 8. gyakorlat C++: szövegfolyamok, intelligens tömbök 2011.11.08. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

feladat pont min elért

feladat pont min elért NEPTUN kód: NÉV: Aláírás: Programozás 2. NZH, 2017. május 11. BME-TTK, fizika BSc Arcképes igazolvány hiányában nem kezdheted meg a ZH-t. A feladatok megoldására összesen 90 perc áll rendelkezésre. A feladatlapot

Részletesebben

Programozás C++ -ban 2007/4

Programozás C++ -ban 2007/4 Programozás C++ -ban 2007/4 1. Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több szempontból is hasznos

Részletesebben

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek: A programozás alapjai 1 Dinamikus adatszerkezetek:. előadás Híradástechnikai Tanszék Dinamikus adatszerkezetek: Adott építőelemekből, adott szabályok szerint felépített, de nem rögzített méretű adatszerkezetek.

Részletesebben

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

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök. Adatfolyamok Hibalehetőségek Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 8. gyakorlat C++: szövegfolyamok, intelligens tömbök 2011.11.08. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

1000.AA Megoldo Alfréd 1000.A

1000.AA Megoldo Alfréd 1000.A Programozás alapjai 2. (inf.) 2. PZH 2018.05.22. hiányzás:0+3 L4-R4P ZH: 27,5+26 ABCDEF IB.028/100. Sum:0 e:19 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de

Részletesebben

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1

Részletesebben

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök Programozás alapjai II. (8. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT Speciális adatszerkezetek A helyes adatábrázolás választása, a helyes adatszerkezet

Részletesebben

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák 2012. március 27. A PROGAMOZÁS ALAPJAI 1 Vitéz András egyetemi adjunktus BME Híradástechnikai Tanszék vitez@hit.bme.hu Miről lesz ma szó? Dinamikus adatszerkezetek Önhivatkozó struktúra keresés, beszúrás,

Részletesebben

500.AA Megoldo Arisztid 500.A

500.AA Megoldo Arisztid 500.A Programozás alapjai 2. (inf.) 2. ZH 2018.05.07. lab. hiányzás: 1+2 a/a/1 ABCD123 a/1. kzh: 4 E:3 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra

Részletesebben

Komputeralgebra Rendszerek

Komputeralgebra Rendszerek Komputeralgebra Rendszerek Összetett adatszerkezetek a MAPLE -ben Czirbusz Sándor ELTE IK, Komputeralgebra Tanszék 2014. március 11. TARTALOMJEGYZÉK 1 of 66 TARTALOMJEGYZÉK I 1 TARTALOMJEGYZÉK 2 Kifejezéssorozatok

Részletesebben

111. AA Megoldó Alfréd AA 111.

111. AA Megoldó Alfréd AA 111. Programozás alapjai 2. (inf.) pótzárthelyi 2008.05.22. gyakorlat: 0/0 Érdemjegy: ABCDEF () IB028/102. Hftest: 12000 Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

Smalltalk 2. Készítette: Szabó Éva

Smalltalk 2. Készítette: Szabó Éva Smalltalk 2. Készítette: Szabó Éva Blokkok Paraméter nélküli blokk [műveletek] [ x := 5. 'Hello' print. 2+3] Kiértékelés: [művelet] value az értéke az utolsó művelet értéke lesz, de mindet kiírja. x :=

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Folyamok kezelése Fájlok írása/olvasása Folyamok kezelése Szabvány folyamok Eddig Kiírás a szöveges konzolra:

Részletesebben

félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat

félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat Listák félstatikus adatszerkezetek: verem, várakozási sor, hasítótábla dinamikus adatszerkezetek: lineáris lista, fa, hálózat A verem LIFO lista (Last In First Out) angolul stack, románul stivă bevitel

Részletesebben

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

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 FEJLETT PROGRAMOZÁSI NYELVEK, 2009 2. GYAKORLAT - Linux alatti C/C++ programozás Cél: 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

Részletesebben

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

4. Öröklődés. Programozás II 4. Öröklődés Programozás II Mielőtt belevágunk Egy Tárgy típusú objektumokat tároló tömb i. elemében tároljunk el egy új tárgyat Rossz módszer: tomb[i].setnev( uj.getnev() ); tomb[i].setertek( uj.getertek()

Részletesebben

Programozás alapjai II. (7. ea) C++

Programozás alapjai II. (7. ea) C++ Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1

Részletesebben

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

Algoritmizálás + kódolás C++ nyelven és Pascalban Algoritmizálás + kódolás nyelven és ban Motiváció A Programozási alapismeretek tárgyban az algoritmizáláshoz struktogramot, a kódoláshoz nyelvet használunk, a Közismereti informatikában (a közoktatásban

Részletesebben

Programozás módszertan

Programozás módszertan Programozás módszertan p. Programozás módszertan Operátorok túlterhelése a C++ nyelvben Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA TANSZÉK Bevezetés Programozás

Részletesebben

Programozás C++ -ban 2007/7

Programozás C++ -ban 2007/7 Programozás C++ -ban 2007/7 1. Másoló konstruktor Az egyik legnehezebben érthető fogalom C++ -ban a másoló konstruktor, vagy angolul "copy-constructor". Ez a konstruktor fontos szerepet játszik az argumentum

Részletesebben

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

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum Ismétlés int main() { string s; s; s= bla ; cout

Részletesebben

Bevezetés a programozásba Előadás: A const

Bevezetés a programozásba Előadás: A const Bevezetés a programozásba 2 6. Előadás: A const ISMÉTLÉS Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; }; void Particle::rajzol() { gout

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Tömbök (3. rész) Konstansok Kivételkezelés Tömbök 3. Többdimenziós tömbök Többdimenziós tömbök int a; Többdimenziós tömbök int a[5]; Többdimenziós tömbök

Részletesebben

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

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés Bevezetés a programozásba 2 7. Előadás: Objektumszű és osztályszű elemek, hibakezelés ISMÉTLÉS Osztály class Particle { public: Particle( X, X, Y); virtual void mozog( ); ); virtual void rajzol( ) const;

Részletesebben

Programozás C++ -ban

Programozás C++ -ban Programozás C++ -ban 4. Bevezetés az osztályokba 4.1 Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több

Részletesebben

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime? Ugrólisták Ugrólisták Ugrólisták Ugrólisták RSL Insert Example insert(22) with 3 flips 13 8 29 20 10 23 19 11 2 13 22 8 29 20 10 23 19 11 2 Runtime? Ugrólisták Empirical analysis http://www.inf.u-szeged.hu/~tnemeth/alga2/eloadasok/skiplists.pdf

Részletesebben

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

Programozás II. 2. Dr. Iványi Péter Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c

Részletesebben

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december A C++ programozási nyelv Soós Sándor 1/10 Tartalomjegyzék Objektumok

Részletesebben

Felhasználó által definiált adattípus

Felhasználó által definiált adattípus Felhasználó által definiált adattípus C++ Izsó Tamás 2017. február 24. Izsó Tamás Felhasználó által definiált adattípus/ 1 Irodalom Izsó Tamás Felhasználó által definiált adattípus/ 2 Programtervezési

Részletesebben

C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv Konstruktorok-destruktorok C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Sztringek Osztályok alapjai Sztringek Szöveges adatok kezelése Sztring Karakterlánc (string): Szöveges adat Karaktertömbként tárolva A szöveg végét a speciális

Részletesebben

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

Bevezetés a programozásba. 11. Előadás: Esettanulmány Bevezetés a programozásba 11. Előadás: Esettanulmány ISMÉTLÉS Függvényhívás #include #include #include #include using using namespace namespace std; std; double double

Részletesebben

Globális operátor overloading

Globális operátor overloading Programozás II. 9. gyakorlat Operátor overloading 2: Unáris operátorok, globálisan megvalósított operátorok, > operátorok Kivételkezelés, IO library Globális operátor overloading Előző alkalommal

Részletesebben

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

Bevezetés a programozásba. 8. Előadás: Függvények 2. Bevezetés a programozásba 8. Előadás: Függvények 2. ISMÉTLÉS Helló #include using namespace std; int main() cout

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

Programozás alapjai. 5. előadás

Programozás alapjai. 5. előadás 5. előadás Wagner György Általános Informatikai Tanszék Cserélve kiválasztásos rendezés (1) A minimum-maximum keresés elvére épül. Ismétlés: minimum keresés A halmazból egy tetszőleges elemet kinevezünk

Részletesebben

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET Szerkesztette: Balogh Tamás 2013. március 31. Ha hibát találsz, kérlek jelezd a info@baloghtamas.hu e-mail címen! Ez a Mű a Creative Commons Nevezd meg! -

Részletesebben

Programozás C++ -ban

Programozás C++ -ban 8. Dinamikus objektumok Programozás C++ -ban Ahhoz hogy általános prolémákat is meg tudjunk oldani, szükség van arra, hogy dinamikusan hozhassunk létre vagy szüntethessünk meg objektumokat. A C programozási

Részletesebben

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

Szövegek C++ -ban, a string osztály Szövegek C++ -ban, a string osztály A string osztály a Szabványos C++ könyvtár (Standard Template Library) része és bár az objektum-orientált programozásról, az osztályokról, csak később esik szó, a string

Részletesebben

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) {} };

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) {} }; A C++ kódokban lévő makrókat melyik egység dolgozza fel az alábbiak közül? preprocessor A szabványos C++-ban nem is írhatunk makrókat (csak C-ben) assembler linker Az alábbi példában a Foo f(5); konstruktor

Részletesebben

C++ Gyakorlat jegyzet 7. óra

C++ Gyakorlat jegyzet 7. óra C++ Gyakorlat jegyzet 7. óra A jegyzetet Umann Kristóf készítette Horváth Gábor gyakorlata alapján. (2018. április 30.) 0.1. Header fájlra és fordításra egységre szétbontás Ha egy darab header fájlban

Részletesebben

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t.. A Név: l 2014.04.09 Neptun kód: Gyakorlat vezető: HG BP MN l 1. Adott egy (12 nem nulla értékû elemmel rendelkezõ) 6x7 méretû ritka mátrix hiányos 4+2 soros reprezentációja. SOR: 1 1 2 2 2 3 3 4 4 5 6

Részletesebben

Programozási Nyelvek (C++) Összefoglaló

Programozási Nyelvek (C++) Összefoglaló Programozási Nyelvek (C++) Összefoglaló Somogyi Krisztián gondozásában 2009-12-22 1. tétel: Fordítás [fordítási egység; warning; error; g++ kapcsolók] A teljes programot általában lehetetlen egy fájlban

Részletesebben

5. Gyakorlat. struct diak {

5. Gyakorlat. struct diak { Rövid elméleti összefoglaló 5. Gyakorlat Felhasználó által definiált adattípusok: A typedef egy speciális tárolási osztály, mellyel érvényes típusokhoz szinonim nevet rendelhetünk. typedef létező_típus

Részletesebben

INFORMATIKA javítókulcs 2016

INFORMATIKA javítókulcs 2016 INFORMATIKA javítókulcs 2016 ELMÉLETI TÉTEL: Járd körbe a tömb fogalmát (Pascal vagy C/C++): definíció, egy-, két-, több-dimenziós tömbök, kezdőértékadás definíciókor, tömb típusú paraméterek átadása alprogramoknak.

Részletesebben