26
Bevezetés Nehézségek Megoldási lehet ˝ oségek Összefoglalás Challenge Accepted: C++ Standard Template Library Pataki Norbert ELTE Informatikai Kar, Programozási Nyelvek és Fordítóprogramok Tanszék [email protected] Szakmai Esti Mesék Challenge Accepted:C++ Standard Template Library Pataki Norbert

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:

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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