Witam, napisałem program tworzący listę jednokierunkową , sortujący ją, usuwający wielokrotności liczby 5, mający opcję dodawanie elementów (na początku listy wewnątrz i na końcu) oraz usuwanie elementów (na początku, wewnątrz i na końcu).
Elementy listy posiadają wartości wg wzoru (i^2)%50, gdzie i jest jakby indeksem elementu.
Będę wdzięczny za wszelkie opinie, uwagi, wskazówki i co byście dodali, zmienili, napisali inaczej, z góry dziękuję.
Nie lepiej opakować listę w klasę(podobną do std:list) i na niej operować? Teraz masz pomieszane wszystko.
Nie stosujesz nadal zasady DRY i KISS. Mieszasz języki(element::wartosc i element::next) i style(element::wyswietl i UtworzListe, jedno “wszystko z małej” a drugie CamelCase). Komentujesz wszystko co się da, a tak się nie powinno robić bo to tylko zaciemnia kod. Pamiętaj, dobry kod komentuje się sam
Dlaczego jedna, globalna lista. Gdzie konstruktory, operatory przypisania? Dlaczego nie użyć template’ów skoro to prawie nic nie kosztuje i mieć generyczny kod? Po co są te wstawki cout << “komunikat” wewnątrz kodu, który sortuje (jeśli w ogóle to wypadałoby na cerr, i tylko kiedy kompilator przekaże opcję debugującą)? Gdzie Exception-Safety?
Chciałbym móc użyć tego tak:
#include
#include
#include "MyList.hpp"
using namespace std;
// predykat podzielnosci przez 5
bool is_divisible_by_5(int n)
{
return (n % 5 == 0);
}
int main()
{
MyList l, k;
for (int i = 0; i < 50; ++i)
l.push_back(i);
assert(k.size() == 0 && k.empty());
k = l;
assert(k == l);
l.remove_if(is_divisible_by_5);
swap(k, l); // nothrow
// cout << k << endl << l; // standardowe kontenery tego nie implementuja ale to calkiem przydatna rzecz
for (MyList::const_iterator it = k.begin(); it != k.end(); ++it) // moze iteratory to drobna przesada, ale warto sprobowac
cout << *it << ' ';
return 0;
}
Wszystko zależy do czego to ma służyć, bo jak pewnie wiesz, jeśli chodzi o aplikacje czasu rzeczywistego. gdzie każdy kwant czasu jest bardzo ważny, nie liczą się i co bardziej przeszkadzają wstawki debugowe i takie które robią sprawdzania, które można pominąć i które znowu by tylko zajęły nam te kwanty