ile razy liczba jest w tablicy

0

częściowo się zgodzę ale po kolei:

enedil napisał(a):

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

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

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

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

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

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

  1. tDane -> czemu służy przedrostek t?

Ad. 6. W zamyśle 't' to 'tablica`

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

  1. 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 ?

  1. 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 ?

  1. &_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)

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

3

@zkubinski:

Proste zadanie, proste rozwiązanie.

#include <iostream>
#include <unordered_map>

int main()
{
    int tab[10] = {1, 2, 2, 2, 5, 6, 7, 8, 9, 10};
    std::unordered_map<int, int> intHistogram;
    for(int i = 0; i < sizeof(tab)/sizeof(tab[0]); ++i)
        intHistogram[tab[i]]++;

    for(const auto& item : intHistogram)
        std::cout<<"number: "<<item.first<<" frequency: "<<item.second<<std::endl;
}

Porównaj swoje z moim, po co to komplikować ?

1

Ja wiem gdzie jest Twój problem.
Wykładowca Cię nie doceni i nie pomyśli, że jesteś inteligentny jak zobaczy, że próbujesz użyć ak47 do zabicia komara. I to jeszcze w niewłaściwy sposób.
Inteligencja jest widoczna w prostocie a nie w komplikacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0