This is an old revision of the document!
Responsabili
Deadline soft: 2 aprilie, ora 23:55
Depunctare întârziere după depășirea deadline-ului soft: -10p/zi
Deadline hard: 5 aprilie, ora 23:55
În urma realizării acestei teme:
Ne propunem să simulăm funcționalitatea unei structuri de date omogenă, care se redimensionează, de tip std::vector din STL. De atlfel, ne propunem implementarea unui iterator care să poate funcționa pe aceasta structură de date, similiar cu std::vector::iterator din STL.
Reprezintă o clasă care implementează funcționalitatea unui vector cu elemente generice. Se dorește implementarea următoarelor funcționalități:
Reprezintă o clasă care va fi folosită pentru a itera asupra structurii de date de mai sus. Astfel, ea va avea nevoie de următoarele funcționalități:
Exemplu simplu de folosire (evident, clasele voastre vor fi template-uite):
MyVector a; /* a are o dimensiune default de 10 elemente */ MyIterator it; for (int i = 0; i < 20; ++i) a[i] = i; /* se iterează asupra vectorului cu ajutorul iteratorului */ for (it = a.begin(); it != a.end(); ++it) std::cout << *it << ' ' << std::endl; /* se printează elementele */
Se cere să se implementeze funcționalitățile descrise mai sus, în 2 fișiere, MyVector.h și MyIterator.h, care vor fi incluse în fișierele noastre de teste.
Tema voastră va fi testată folosind niște fișiere sursă .cpp, care vor include cele 2 header-e și vor instanția cele 2 clase pe care le aveți de implementat, verificând funcționalitățile cerute.
Veți implementa cele două clase template-uite în câte un fișier header separat, MyVector.h și MyIterator.h.
observație: Față de funcționalitățile descrise mai sus, clasele vor trebui, evident, să respecte rule of three.
Aveți la dispoziție o arhivă ce conține o suită de teste publice (singurele cu care va fi testată tema), reprezentate prin niște fișiere .cpp, și un Makefile care va încerca compilarea fiecărui fișier din teste.
Temele vor trebui trimise pe vmchecker. Atenție! Temele trebuie trimise în secțiunea Structuri de Date (CA).
Arhiva trebuie să conțină:
Mai multe exemple găsiți aici, la răspunsul acceptat (cel cu checked). De altfel, mai multe despre undefined behaviour găsiți aici, aici și aici. Ar fi de preferat să citiți aceste articole înainte de implementarea temei.
Coding style-ul trebuie sa fie consistent și ușor de citit. Ca ghid vă recomandăm:
sau
Atenție! Tema valorează 0.75 punct din nota finală. Cele 100 de puncte acordate de noi se vor regăsi proporțional în punctajul de 0.75. Citiți cu atenție Regulamentul General de Trimitere a Temelor.
De aceea, vă sfătuim să nu vă lăsați rezolvări ale temelor pe calculatoare partajate (la laborator etc), pe Drive/Dropbox/mail/liste de discuții/grupuri/facebook/reddit/9gag etc.
În cazul detectării plagiatului, argumentele de tipul “mi-am lăsat calculatorul logat pe Drive” vor avea aceeași valoare cu “mi-a mâncat câinele codul”. You have been warned :)
Q: Se poate folosi STL?
A: Nu puteți folosi structurile gata implementate în STL. Obiectivul principal al cursului de structuri de date este acela ca voi să implementați structurile respective.
Q: Avem vreun schelet de cod? Practic ce clase, metode, operatori trebuie să implementăm?
A: Nu există schelet de cod pentru tema aceasta. Trebuie să vă dați seama din specificația temei (dacă nu e suficient de clară, întrebați) ce anume trebuie să implementați (metode, operatori etc).
Q: De ce trebuie să mă chinui atât ca doar să mi se compileze codul?
A: După cum observați, structura de date în sine este foarte simplă. Pentru că abia învățați baza C++, ne așteptăm ca operațiile pe care trebuie să le suporte MyVector și MyIterator să vă dea (foarte probabil) bătăi de cap la compilare. Este intenționat. Deducerea semnăturilor corecte pentru metode, operatori etc și utilizarea lor corectă fac parte din dificultatea temei.