AngelicaBGG / ASDClab

0 stars 0 forks source link

Lab 2 notes #1

Open AntonC9018 opened 3 months ago

AntonC9018 commented 3 months ago

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L34 În general, nu folosi const std::string&. La mine în docuri este de ce. La tema cu șiruri. Folosi în loc de asta std::string_view.

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L69 Aici nu se verifică dacă conversiunea a trecut cu succes.

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L77 Folosi std::span în loc de const std::vector&.

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L86 Cred că s-ar mai trebui să distingi aici eroarea în timpul parsării unei linii și faptul că nici nu era următoarea linie. Deci posibil vrei să returnezi aici mai multe informații decât doar un bool. Iacă depre acest lucru https://github.com/AntonC9018/uniCourse_dataStructuresAndAlgorithms/blob/master/en/07_serialization/doc.md

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L21 Pentru ce declari asta? Nu văd tare mult sens. Lasă, nu este important.

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L97 Aici copiezi zacem-to toate datele, de două ori, de fiecare dată când creezi acel tip. Prima dată afară, când creezi acel vector în cod care inițializează o variabilă de acest tip, a două oară când copiezi asta în variabila locală pentru parametru, și pentru a treia oară când copiezi din parametru în câmpul students. Citește despre move semantics. Aici parametru trebuie să fie Students&& și trebuie să folosești std::move peste tot, ca că nu faci copii redundante. Aici este despre asta https://github.com/AntonC9018/uniCourse_dataStructuresAndAlgorithms/blob/master/en/05a_programming_fundamentals/02_RAII.md

AntonC9018 commented 3 months ago

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L106 Asta trebuie să-ți dea o eroare când compilezi cu warninguri (-Wall -Werror). Aici ori adaugă un static_cast în int explicit, că se schimbă semnul și deoarece size_t nu se încape într-un int (ocupă 8 byte de obicei în loc de 4), ori mai bine, folosi size_t peste tot în loc de int la indici.

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L122 Asta este incorect. Implicit, nu ai rezultat. Trebuie să returneze un nullptr.

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L101 Aici returnează pointerul la acel element, dar nu o copie.

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L93 Dar de ce asta e o clasă? Mai degrabă fă aceste operații ca funcții separate. Și fă-le mai bine să primească std::span ca parametru. Dacă ele-s înăuntru unei clase, nu este clar întregul context al lor.

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L273-L275 Scoate duplicarea codului ori prin polimorfism (un functor, este în docuri despre polimorfism https://github.com/AntonC9018/uniCourse_dataStructuresAndAlgorithms/blob/master/en/05a_programming_fundamentals/11_polymorphism.md) ori prin niște cicluri imbricate folosind un state machine (este arătat codul aproximativ la sarcini).

AntonC9018 commented 3 months ago

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L185 Aici cred că trebuie să fie std::span. Și aista îți trebuie doar la creare, nu îl sălva în acel câmp.

AntonC9018 commented 3 months ago

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L199 Nu copia aici studentul.

AntonC9018 commented 3 months ago

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L207 Asta pentru ce? El zhe se declară din nou la începutul ciclului. A, tipa îl folosești ca variabila locală? Atunci pune nodul nou într-o variabilă locală nouă. Că reprezintă altă idee deja. Întreabă dacă nu e clar.

Renumește variabilele peste tot mai adecvat. Nu folosi prescurtări. LM? Nu este clar ce-i asta.

AntonC9018 commented 3 months ago

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L231-L234 Pentru ce asta există? Obține care nod? Poți spune arbore.Vârf dar. Care-i sens în această metodă?

AntonC9018 commented 3 months ago

https://github.com/AngelicaBGG/ASDClab/blob/2fd059b8db87d1a415f76d779b509aa344b3f7f4/lab2/main.cpp#L242 Asta nu se adresează la variabile membri, dar este o metodă membru. De ce? Dar și în principiu nu ai nevoie de acea clasă.

AntonC9018 commented 3 months ago

Ei, e ok să folosești acea clasă ca un fel de interfață pentru o folosire mai ușoară (am uitat cum se numește pattern-ul), dar nu pune implementările funcțiilor acolo. Invoacă niște funcții libere cu implementările. Dar aici nu are această abstracție sens că fiecare algoritm depinde doar de tabloul de intrare.

AntonC9018 commented 3 months ago

Se numește "facade pattern"