Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] wskaźniki oraz stringi w funkcjach (kodowanie huffmana)

Ostatnio zmodyfikowano 2014-07-01 15:43
Autor Wiadomość
Monika90
» 2014-06-30 15:11:44
@Kinga
C/C++
priority_queue < element > kolejka;
tak nie może być, musisz użyć kolejki wskaźników:
C/C++
std::priority_queue < element *, std::vector < element *>, porownanie > kolejka;
ale zanim to zrobisz, to musisz zdefiniować funktor porównujący częstości wystąpienia znaków
C/C++
struct porownanie
{
    bool operator ()( const element * e1, const element * e2 ) const
    {
        return e1->key < e2->key;
    }
};

w tej pętli też uzyj new
C/C++
for( int i = 0; i < ileznakow; ++i )
{
    cin >> znak >> jakczesto;
    el1 = element( znak, - jakczesto );
    kolejka.push( el1 );
}

C/C++
el3->znak = NULL;
NULL? Nieeeeeeeeeeeeeeeee!!!!!!!!!!11111!!!!!!
P-112982
kinga9650
Temat założony przez niniejszego użytkownika
» 2014-06-30 22:46:22
@michal11, czyli...
primo - jeśli tu by był konstruktor to powstałby nowy obiekt, ale to konstruktor nie jest
+ w takim razie czym są poniższe linijki w kodzie?
C/C++
element( char a, int k )
    : key( k )
     , znak( a )
     , left( NULL )
     , right( NULL )
{ };
element() { };
secundo - czyli jeśli tworzę własną klasę muszę opisać każdą wykonywaną operację, przypisać znaczenie każdemu operatorowi, tak?
tercero - to co w takim razie ta linijka robi teraz, skoro nie to co myślę? ;)

@Moinka a czemuż to nie może być 'zwykła' kolejka? Nawet przeciążenie operatora porównywania ani nic w tym style nic tu nie zdziała?
Ale na pewno nie potraktuje to takiego 'NULL' jako 0? Takie rozwiązanie, jak jest w ym momencie jest 'niebezpieczne', czyt. może mi np. wrzucić do tej zmiennej obojętnie co?
P-113006
pekfos
» 2014-06-30 23:10:18
Ale na pewno nie potraktuje to takiego 'NULL' jako 0? Takie rozwiązanie, jak jest w ym momencie jest 'niebezpieczne', czyt. może mi np. wrzucić do tej zmiennej obojętnie co?
Powinno być tam zero.. ale NULL jest niemodne i w ogóle 'be'. Teraz w C++ używa się nullptr.
P-113009
michal11
» 2014-07-01 12:41:57
Nie, to jest konstruktor i to w dodatku wywoływany jawnie. Tworzy on nowe obiekty przypisywane w każdym obiegu pętli do tej samej nazwy, inna sprawa, że za każdym razem przyjmuje takie same argumenty, czyli robisz ileś takich samych obiektów.
Nie musisz robić wszystkich operatorów, tylko te z których korzystasz.
Akurat w twoim przypadku może działać tak jak myślisz, ale jeżeli w klasie są wskaźniki to lepiej samemu zdefiniować sobie konstruktor kopiujący i operator=.
P-113020
Monika90
» 2014-07-01 15:43:15
@Monika a czemuż to nie może być 'zwykła' kolejka? Nawet przeciążenie operatora porównywania ani nic w tym style nic tu nie zdziała?
To może być zwykła kolejka, dla mnie kolejka wskaźników jest tutaj bardziej naturalna, ale zrób jak chcesz.


Ale na pewno nie potraktuje to takiego 'NULL' jako 0? Takie rozwiązanie, jak jest w ym momencie jest 'niebezpieczne', czyt. może mi np. wrzucić do tej zmiennej obojętnie co?
NULL jest dla wskaźników, znak to nie jest wskaźnik. Znak o kodzie zero to '\0'.
Użycie NULL sugeruje czytającemu kod, że zmienna znak jest typu wskaźnikowego, a przecież nie jest, więc to jest oszukiwanie czytelnika.
P-113040
1 2 « 3 »
Poprzednia strona Strona 3 z 3