Challenge Accepted:C++ Standard Template Library

Hasonló dokumentumok
C++ Standard Template Library (STL)

Bevezetés a programozásba 2

C++ Standard Template Library

Alprogramok, paraméterátadás

Fejlett programozási nyelvek C++ Iterátorok

Generatív programok helyessége

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

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

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 szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

C++ Gyakorlat jegyzet 10. óra

C++ Gyakorlat jegyzet 9. óra

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

Collections. Összetett adatstruktúrák

C++ programok fordítása

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

Programozási Nyelvek: C++

Osztály és objektum fogalma

Térinformatikai algoritmusok Elemi algoritmusok

Programozási technológia

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

Generatı v programok helyesse ge

GTL Graphical Template Library

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I.

Térinformatikai algoritmusok Elemi algoritmusok

Széchenyi István Egyetem

.AA Megoldó Alfréd AA.

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

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

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

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

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

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

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

C++ Gyakorlat jegyzet 10. óra.

feladat pont min elért

117. AA Megoldó Alfréd AA 117.

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

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

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

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

Programozási nyelvek Java

Számítógép és programozás 2

Fejlett programozási nyelvek C++

Pénzügyi algoritmusok

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

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

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

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

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

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

Algoritmusok és adatszerkezetek II.

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

3. Osztályok II. Programozás II

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

1000.AA Megoldo Alfréd 1000.A

1.AA MEGOLDÓ BERCI AA 1.

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

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

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

Objektum orientált kiterjesztés A+ programozási nyelvhez

500.AA Megoldó Kulcsár 500.A

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

- 1 - Konstansok használata. Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben! a) const char * str="zh"; str[0]++;

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

Programozási nyelvek (ADA)

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

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

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Mobil Informatikai Rendszerek

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

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

500. AA Megoldó Alfréd AA 500.

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

A.NET Framework és programozása C# nyelven. Kedd I104

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

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

Objektumok inicializálása

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?

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

C++ Gyakorlat jegyzet 12. óra

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

A Feldspar fordító, illetve Feldspar programok tesztelése

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

Feladat. Ternáris fa. Típusspecikáció. Reprezentáció. Absztrakt implementáció. Érdi Gerg EAF II. 4/3.

Mobil Informatikai Rendszerek

C++ Gyakorlat jegyzet 8. óra

INFORMATIKAI ALAPISMERETEK

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

500. CC Megoldó Alfréd CC 500.

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

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ás II gyakorlat. 8. Operátor túlterhelés

Memóriakezelés, dinamikus memóriakezelés

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

Átírás:

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: vector, set, map, stb. algoritmusok: copy, find_if, sort, stb. Előnyök Műveletigény garanciák

21 nap alatt...

Olvasnivalók

Általános nehézségek Fordítási hibaüzenetek Hordozhatósági problémák Teljesítmény csökkenés Memória szivárgás Korrupt, inkorrekt konténerek Egyéb futási idejű hibák Különös viselkedés

Fordítási hibaüzenetek std::list<int> a; std::sort( a.begin(), a.end() );

Fordítási hibaüzenetek

Fordítási hibaüzenetek C++ templates: megszorítás nélküli template <class T> const T& max( const T& a, const T& b ) { return a < b? b : a; } Concept Concept lite

Hiányzó fordítási hibaüzenetek class complex { //... public: complex( double re, double im ) { //... } }; // operator< nélkül, szokás szerint //... std::set<complex> d; // Lefordul

Hiányzó fordítási hibaüzenetek class complex { //... public: complex( double re, double im ) { //... } }; // operator< nélkül, szokás szerint //... std::set<complex> d; d.insert( complex( 1.11, 2.22 ) );

Fordítási hibaüzenet

Prófécia

Egyezőség Mikor egyezik meg két érték (a és b)? Egyenlőség: a == b Ekvivalencia: (!( a < b ) &&!( b < a ))

Rendezések struct descending { }; bool operator()( int a, int b ) const { return!( a < b ); }

Rendezések const int not_found = 404; std::set<int, descending> s; s.insert( not_found ); s.insert( not_found ); std::cout << s.size(); // 2 std::cout << s.count( not_found ); // 0 std::multiset<int, descending> m; m.insert( not_found ); m.insert( not_found ); std::cout << m.size(); // 2 std::cout << m.count( not_found ); // 0

A probléma háttere Ekvivalencia az előző rendezés szerint!(404 >= 404) &&!(404 >= 404), ami szerint a 404 nem ekvivalens a 404-gyel. A funktor nem teljesíti a szigorú részben rendezés feltételét

Algoritmusok előfeltételei/feltevései Rendezett intervallumok algoritmusai: lower_bound, upper_bound, equal_range, binary_search unique, stb. copy, transform, stb.

Keresés rendezett konténerekben std::set<int> s; int x; //... std::set<int>::iterator i = std::find( s.begin(), s.end(), x ); std::set<int>::iterator it = s.find( x );

Hiba detektálás Statikus elemzés Template metaprogramming Runtime validáció Megfontolások Compiler- és könyvtárfüggetlenség Műveletigény garanciák Külön tool vagy fordítóprogram feladat Fordítás és futási idő növekedés Könyvtári módosítást igényel-e

Téziseim Formális eszközök Fordítási idejű megoldások Futási idejű megközelítések

Visual Studio warning warning C4100: t : unreferenced formal parameter... see reference to function template instantiation void warning<copy_algorithm_without_inserter_iterator>(t) being compiled with [ T=COPY_ALGORITHM_WITHOUT_INSERTER_ITERATOR ]

g++ warning In instantiation of void warning(t) [ with T = COPY_ALGORITHM_WITHOUT_INSERTER_ITERATOR ] :... instantiated from here... warning: unused parameter t

Fordítási ellenőrzések believe-me mark transform, copy... vector<bool>, COAP find, count algoritmusok: rendezett adatszerkezeten nincs believe-me mark...

Futási idejű ellenőrzések struct descending : strict_weak_ordering<int, descending> { }; bool operator()( int a, int b ) const { return!( a < b ); }

Futási idejű ellenőrzések Funktorok tulajdonságai Másoló algoritmusok javítása Algoritmus előfeltételek stb.

Összefoglalás C++ Standard Template Library előnyök / hibalehetőségek Megközelítések statikus elemzés template metaprogramming runtime validáció