częściowo się zgodzę ale po kolei:
Ok, co tutaj jest źle, i czemu to jest bardziej C ze strumieniami, a nie C++, to wyjaśnię (nie jest to też dobre C, ale to inna sprawa):
- W C++ sygnatura
int main(void)
jest niepoprawna (ale za to w C jest poprawna).
Ad.1 to wszystko "od tych książek" o nauce C++ (nie miałem pojęcia, że to jest jakiś staroć z C
- Mieszana konwencja, z jednej strony snake case (
z_pom
), z drugiej camel case (wDane
).
Ad. 2. nie mam pomysłu na nazewnictwo zmiennych, pisałem to, co mi przyszło do głowy... (jeżeli ma ktoś ciekawą lekturę na ten temat, to poproszę)
- Magiczne stałe (
9
), a można było zrobić constexpr size_t size = std::size(tDane)
Ad. 3. a tego to nie wiedziałem, poza tym te '9' stoi tam tymczasowo, dopóki nie rozwiążę reszty problemów do których ma służyć ten kod
- Nazwy typu
element
nic sensownego nie wyrażają, tak samo jak z_pom
, która by mogła być nazwana np. previous_element
.
Ad.4. zgadza się, bo to jest jakaś zmienna, która coś robi i nie mam sensownej nazwy na nią, więc ją tak nazwałem :D
-
int tDaneIlePowt[1][1];
? Dwuwymiarowa tablica jednoelementowa? Czym to jest w ogóle uzasadnione?
Ad.5. No to już jest dalszy ciąg tego, do czego ma służyć algorytm, a żeby rozwiać wątpliwości, to ta tablica będzie przechowywać ilość liczb które się powtarzają i jakie to są liczby
-
tDane
-> czemu służy przedrostek t
?
Ad. 6. W zamyśle 't' to 'tablica`
- Pętla
for(int j=element; j<9; j++){ if (warunek) { coś; } else {break;}}
to tak naprawdę powinna być pętla while.
Ad.7. dlaczego while
? Co jest złego w for
? (jakoś częściej używam for
aniżeli while
- Irracjonalne użycie pary
new[]
i delete[]
- tutaj powinien być std::vector
. Dzięki temu zyskasz RAII, jawne wyrażenie tego kiedy i przez kogo zasoby powinny być zwolnione, a także wyrażasz intencję funkcji sort
, która notabene powinna mieć sygnaturę int* sort(const int[])
, albo jeszcze lepiej wersję gdzie podajesz rozmiar, int* sort(const int[], size_t)
.
Ad. 8. Wiem, że jest "vector" ale ja ciągle ćwiczę, a ćwiczę aby być bardziej kumatym. Co to jest RAII ? I ciekawi mnie to -> int* sort(const int[], size_t)
- co mi to daje ?
- Używanie własnego swapowania zamiast
std::swap
.
Ad. 9. jakiego swapowania ? Co to jest ten swap i do czego to służy ? Gdzie to jest u mnie w kodzie ?
-
&_tSort[0]
zamiast _tSort
Ad. 10. to są równoważne zapisy, korzystam z tego, bo dla mnie jest czytelniejszy (nie zależy mi na tzw. skrótach aby "oszczędzić" pisania)
- W ogóle pisanie takiej funkcji sortującej tylko dla intów, a nie jako funkcja szablonowa dla dowolnych częściowo uporządkowanych typów.
Ad. 11. Celowo ma być tylko dla typów int
, bo w tym algorytmie nie przewiduję losowania innych typów