challenge accepted: c++ standard template librarypatakino.web.elte.hu/pataki_szem_stl.pdf ·...
TRANSCRIPT
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
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
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
21 nap alatt...
Challenge Accepted:C++ Standard Template Library Pataki Norbert
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Olvasnivalók
Challenge Accepted:C++ Standard Template Library Pataki Norbert
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
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
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Fordítási hibaüzenetek
Challenge Accepted:C++ Standard Template Library Pataki Norbert
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
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
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
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Fordítási hibaüzenet
Challenge Accepted:C++ Standard Template Library Pataki Norbert
Bevezetés Nehézségek Megoldási lehetoségek Összefoglalás
Prófécia
Challenge Accepted:C++ Standard Template Library Pataki Norbert
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
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
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
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
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
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
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
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
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
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
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
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
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
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