[C++] Lista jednokierunkowa - tworzenie, sortowanie itp

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ę.

http://wklej.org/id/227107/

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 :wink:

To tyle po bardzo ogólnym przejrzeniu.

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;

}

Przyjrzyj się interfejsowi list z STLa:

http://www.cplusplus.com/reference/stl/list/

@flash4gordon

Hmm ciekawe opinie!?

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

Ale ogólnie dobrze przedstawiony problem :wink:

Pozdrawiam