kamilall234 Temat założony przez niniejszego użytkownika |
<list> problem z wyświetlaniem danych » 2014-05-25 20:30:02 Witam. Stosuje <list> w celu stworzenia listy dwukierunkowej do posiadania kart gracza, tworzenie listy odbywie się bez problemu jednak, mam kłopot z wyświetlaniem jej. Mam klase Gracz, która korzysta z klasy Zakupione_Gracza w celu tworzenie listy <list>: class Gracz { private: int numer_gracza; int konto; string kolor; string nazwa; int pozycja_na_planszy; int kolejka_gry; list < Zakupione_Gracza *> karty_gracza; Transakcja * wplyw_kasy; public: Gracz( int, int ); int rzut_koscia( Kosc * ); int ruch_gracza( int ); void kup_dzialke( int, int, int ); int zaplac( int ); int status_konta(); int dostan_kase(); void wyswietl_karty(); };
Funckja, kup_dzialke() słóży do dodawania kart, wygląda tak void Gracz::kup_dzialke( int numer, int cena, int hipoteka ) { karty_gracza.push_back( new Zakupione_Gracza( numer, cena, hipoteka ) ); };
I teraz nie mogę wyświetli kart gracza za pomocą takiej funckji; void Gracz::wyswietl_karty() { cout << "Gracz posiada : " << karty_gracza.size() << " kart" << endl; int ilosc_kart = karty_gracza.size(); list < Zakupione_Gracza *> it; for( it = karty_gracza->begin(); it != lista->end(); ++it ) { cout << "Miasto nr: " <<( * it ).numer << endl; } }
Nie mogę zrozumieć na czym polega błąd, przecież int jest tego samego typu, do tego jest wskaźnikiem. Czy moze ktoś pomóc ? Blad polega na tym, że base operand of '->' has non - pointer type ' list<Zakupione_Gracza*> [/cpp]
|
|
Monika90 |
» 2014-05-25 20:39:32 it = karty_gracza->begin()
it to jest lista, a przypisujesz jej iterator nie widzę nigdzie deklaracji zmiennej lista A tak w ogóle, to z jakiego powodu używasz std::list a nie std::vector? |
|
michal11 |
» 2014-05-25 20:43:00 karty_gracza->begin() Karty gracza to nie wskaźnik. Mi też się wydaje, że lista to chyba nie jest odpowiednia struktura do przechowywania kart gracz. |
|
kamilall234 Temat założony przez niniejszego użytkownika |
» 2014-05-25 20:45:55 Nie miałem innego pomysłu na przechowywanie kart gracza, za pomocą vector, rzechowuje już graczy i tworze plansze. Dlatego chciałem list. Mam przeżucić na vector ? W dodatku myslałem ze z <list> jest lepiej usuwać elementy niż z vectora |
|
Monika90 |
» 2014-05-25 20:54:31 Nie, no jak chcesz to sobie używaj listy, choć argument za pomocą vector, przechowuje już graczy i tworze plansze. Dlatego chciałem list. |
jest dość dziwny. W dodatku myslałem ze z <list> jest lepiej usuwać elementy niż z vectora
|
dla małej ilości elementów pewnie nie zauważysz różnicy w wydajności między vectorem a listą |
|
michal11 |
» 2014-05-25 21:26:48 za pomocą vector, przechowuje już graczy i tworze plansze. |
Ten argument nie jest dziwny tylko beznadziejny. Czyli jak masz za dużo intów w programie to też musisz się przerzucić na long ? Po to stworzono kilka struktur danych aby korzystać z nich według ich przeznaczenia. Generalnie usuwanie elementów z listy nie jest najwydajniejszym algorytmem. |
|
ison |
» 2014-05-25 23:34:24 Generalnie usuwanie elementów z listy nie jest najwydajniejszym algorytmem.
|
? Generalnie usuwanie z listy jest szybsze albo tak samo szybkie jak usuwanie z vectora. Z teoretycznego punktu widzenia usunięcie elementu z listy to czas stały O(1), z vectora czas liniowy O(n), gdyż wszystkie kolejne elementy muszą być przesunięte o 1 pozycję w lewo. Jeśli kolejność elementów nie gra roli, to można używać vectora, a przy usuwaniu i-tego elementu zamienić go z ostatnim i usunąć ostatni element w czasie stałym O(1). Za użyciem vectora zamiast listy przemawia jednak inny argument, zwłaszcza wtedy, gdy częściej iteruje się po kontenerze, aniżeli usuwa/dodaje do niego elementy. Iterowanie po liście = same cache missy, każdy element listy to osobny blok pamięci w losowym miejscu. Vector to ciągły blok pamięci. Aczkolwiek dla tak małej ilości danych nie ma to żadnego znaczenia, więc i tak używa się najwygodniejszego kontenera, a nie najszybszego. |
|
michal11 |
» 2014-05-25 23:47:21 @ison nie porównywałem usuwania z listy z usuwania z vectora. |
|
« 1 » 2 |