Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

 termín: středa 11.3. 23:59  vytvořit kontejner – dvourozměrná matice  dopředné (forward) iterátory přes sloupce i řádky  velikost fixní, určená parametry.

Podobné prezentace


Prezentace na téma: " termín: středa 11.3. 23:59  vytvořit kontejner – dvourozměrná matice  dopředné (forward) iterátory přes sloupce i řádky  velikost fixní, určená parametry."— Transkript prezentace:

1

2  termín: středa :59  vytvořit kontejner – dvourozměrná matice  dopředné (forward) iterátory přes sloupce i řádky  velikost fixní, určená parametry konstruktoru  kopie kontejneru včetně změny rozměrů  neřešit metody pro zvětšování a zmenšování  nutná podpora move (move konstruktory / rvalue reference)  bonus (max +2 body): správné řešení const kontejneru  bonus (max +1 body): indexace přes řádky i sloupce ◦ a[x][y] (a.rows()[x][y] a.cols()[x][y])  bonus (max +1 body): bezpečné řešení v debug módu ◦ odchytávat všechny nedefinované akce

3 typedef matrix my_matrix; int cnt = 100; void f1( my_matrix::cols_t::value_type::reference x) { x = ++cnt; } void f2( my_matrix::cols_t::reference r) { for_each( r.begin(), r.end(), f1); } void f3( my_matrix::rows_t::value_type::reference x) { cout << x << " "; } void f4( my_matrix::rows_t::reference r) { for_each( r.begin(), r.end(), f3); cout << endl; } int main( int argc, char ** argv) { my_matrix a( 3, 4, 0); for_each( a.cols().begin(), a.cols().end(), f2); for_each( a.rows().begin(), a.rows().end(), f4); } procházení po sloupcích procházení po řádkách procházení prvků sloupce

4  vytvořené třídy musí být kompatibilní s STL kontejnery a algoritmy ◦ všechny vyžadující forward iterator - for_each ◦ pro pomocné třídy cols/rows vytvořit:  typy: iterator, reference, value_type  metody: begin(), end(), size(), bonus: op[]  iterátory: ◦ 5 typů, *, ->, ++, =, ==  celkem 4 pomocné kvazi-kontejnery: ◦ řádky, sloupce, prvky v řádku, prvky v sloupci ◦ to celé znásobeno podporou const (bonus)

5  problém: ◦ kvazikontejner vrací iterátor, ten má svoji hvězdičkou zpřístupnit něco, co v té matici nemusí být (typicky sloupec)  možné řešení: ◦ * na iterátoru vrátí hodnotou pomocnou na na místě sestrojenou třídu  normálně * vrací T& ◦ tady nás k tomu sice nic nenutí ◦ musí se to ale chovat podobně  pozor: ◦ na iterátoru musí být -> (požadavek normy) ◦ běžné řešení: vrátí ukazatel na typ s příslušnými metodami  není ale na co vrátit * ◦ nebo: vrátí jinou třídu s přetíženým operátorem ->  jiná třída - proxy na sloupec

6  včasnost ◦ za nedodržení termínu body prudce dolů  přeložitelnost ◦ přeložitelné bez chyb a (pokud možno) warningů ◦ kompatibilní s vzorem použití (rozhraní je pevné)  multiplatformnost ◦ nezávislost na OS, bitovosti, překladači - vyzkoušejte i gcc32/VS64  stabilita ◦ rozhodně vyzkoušejte všechna možná přípustná data a typy  kultura kódu ◦ pravidla, moudra, dobré zvyky, udržovatelnost, estetika, čitelnost  odevzdávací formality a konvence ◦ názvy a struktura souborů, komentáře

7  indexace přes řádky i sloupce ◦ max +1 body ◦ a[x][y] ◦ (a.rows()[x][y]) ◦ a.cols()[x][y]  bezpečné řešení v debug módu ◦ max +1 body ◦ odchytávat všechny nedefinované akce ◦ du_assert(e)  if( e == 0) chyba ◦ v debug verzi  du_assert vypíše lokaci a skončí ◦ v release verzi (definováno makro DU_NDEBUG)  nedělá nic - odletí

8  v du1.zip najdete 4 soubory ◦ du1test.cpp  kód používající vaše řešení - neměňte - zachovat rozhraní!  můžete (velmi doporučeno!) přidat vlastní testy ◦ du1debug.hpp  definice pro bonus - du_assert ◦ du1matrix.cpp, du1matrix.hpp  sem doplňte kód a hlavičkový soubor vašeho řešení  soubory nepřejmenovávejte ◦ na začátek každého souboru vložte komentář typu // DU1matrix.cpp // Karel Vomacka NPRG /2015  vaše řešení vložte do Grupíčku - neposílejte em! ◦ správné soubory do správných sloupečků!


Stáhnout ppt " termín: středa 11.3. 23:59  vytvořit kontejner – dvourozměrná matice  dopředné (forward) iterátory přes sloupce i řádky  velikost fixní, určená parametry."

Podobné prezentace


Reklamy Google