![Page 1: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/1.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Challenge Accepted:C++ Standard Template Library
Pataki Norbert
ELTE Informatikai Kar,Programozási Nyelvek és
Fordítóprogramok Tanszé[email protected]
Szakmai Esti Mesék
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 2: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/2.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
C++ Standard Template Library
Felépítésekonténerek: vector, set, map, stb.algoritmusok: copy, find_if, sort, stb.
ElonyökMuveletigény garanciák
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 3: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/3.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
21 nap alatt...
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 4: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/4.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Olvasnivalók
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 5: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/5.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Általános nehézségek
Fordítási hibaüzenetekHordozhatósági problémákTeljesítmény csökkenésMemória szivárgásKorrupt, inkorrekt konténerekEgyéb futási ideju hibákKülönös viselkedés
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 6: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/6.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Fordítási hibaüzenetek
std::list<int> a;std::sort( a.begin(), a.end() );
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 7: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/7.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Fordítási hibaüzenetek
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 8: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/8.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Fordítási hibaüzenetek
C++ templates: megszorítás nélkülitemplate <class T>const T& max( const T& a, const T& b ){return a < b ? b : a;
}
ConceptConcept lite
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 9: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/9.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
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
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 10: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/10.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
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 ) );
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 11: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/11.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Fordítási hibaüzenet
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 12: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/12.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Prófécia
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 13: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/13.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Egyezoség
Mikor egyezik meg két érték (a és b)?Egyenloség: a == b
Ekvivalencia: (!( a < b ) && !( b < a ))
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 14: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/14.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Rendezések
struct descending{
bool operator()( int a, int b ) const{return !( a < b );
}
};
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 15: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/15.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Rendezések
const int not_found = 404;std::set<int, descending> s;s.insert( not_found );s.insert( not_found );std::cout << s.size(); // 2std::cout << s.count( not_found ); // 0
std::multiset<int, descending> m;m.insert( not_found );m.insert( not_found );std::cout << m.size(); // 2std::cout << m.count( not_found ); // 0
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 16: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/16.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
A probléma háttere
Ekvivalencia az elozo rendezés szerint !(404 >= 404)&& !(404 >= 404), ami szerint a 404 nem ekvivalens a404-gyel.
A funktor nem teljesíti a szigorú részben rendezés feltételét
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 17: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/17.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Algoritmusok elofeltételei/feltevései
Rendezett intervallumok algoritmusai: lower_bound,upper_bound, equal_range, binary_searchunique, stb.copy, transform, stb.
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 18: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/18.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
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 );
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 19: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/19.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Hiba detektálás
Statikus elemzésTemplate metaprogrammingRuntime validációMegfontolások
Compiler- és könyvtárfüggetlenségMuveletigény garanciákKülön tool vagy fordítóprogram feladatFordítás és futási ido növekedésKönyvtári módosítást igényel-e
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 20: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/20.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Téziseim
Formális eszközökFordítási ideju megoldásokFutási ideju megközelítések
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 21: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/21.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Visual Studio warning
warning C4100: ’t’ : unreferenced formalparameter
...see reference to function template
instantiation ’voidwarning<COPY_ALGORITHM_WITHOUT_INSERTER_ITERATOR>(T)’being compiled
with[
T=COPY_ALGORITHM_WITHOUT_INSERTER_ITERATOR]
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 22: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/22.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
g++ warning
In instantiation of ’void warning(T)[
with T = COPY_ALGORITHM_WITHOUT_INSERTER_ITERATOR]’:
... instantiated from here
... warning: unused parameter ’t’
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 23: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/23.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Fordítási ellenorzések
believe-me marktransform, copy...vector<bool>, COAPfind, count algoritmusok: rendezett adatszerkezeten
nincs believe-me mark
...
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 24: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/24.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Futási ideju ellenorzések
struct descending :strict_weak_ordering<int, descending>
{
bool operator()( int a, int b ) const{return !( a < b );
}
};
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 25: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/25.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Futási ideju ellenorzések
Funktorok tulajdonságaiMásoló algoritmusok javításaAlgoritmus elofeltételekstb.
Challenge Accepted:C++ Standard Template Library Pataki Norbert
![Page 26: Challenge Accepted: C++ Standard Template Librarypatakino.web.elte.hu/pataki_szem_stl.pdf · Bevezetés Nehézségek Megoldási lehetoségek˝ Összefoglalás Challenge Accepted:](https://reader030.vdocuments.pub/reader030/viewer/2022041302/5e11e6c40e8b9c23a37730d3/html5/thumbnails/26.jpg)
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Összefoglalás
C++ Standard Template Libraryelonyök / hibalehetoségek
Megközelítésekstatikus elemzéstemplate metaprogrammingruntime validáció
Challenge Accepted:C++ Standard Template Library Pataki Norbert