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

<list> problem z wyświetlaniem danych

Ostatnio zmodyfikowano 2014-05-28 01:38
Autor Wiadomość
pekfos
» 2014-05-26 15:11:41
nie porównywałem usuwania z listy z usuwania z vectora.
A z czym? No fakt, z niczym, bo to 'generalnie nie jest najwydajnieszy algorytm' i tyle.. W takim razie co jest wydajne, skoro usuwanie z listy w czasie stałym takie nie jest..? Proponuję najpierw mieć pojęcie, o czym się mówi, a potem ew o tym mówić.

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.
Listy zwykle się używa, by elementy nie zmieniały pozycji w pamięci, gdy manipuluje się kontenerem. Analogicznym rozwiązaniem jest vector<> wskaźników. cache missy będą występowały w obu przypadkach.
P-110906
kamilall234
Temat założony przez niniejszego użytkownika
» 2014-05-28 01:11:47
Dzięki za odpowiedzi z góry, mogłem uprzedzić bo już sobie poradziłem pare dni temu. Zbliżam się już ku końcowi mojej gry, jednak zauważyłem że nie działa mi poprawnie Transakcja. Nie dodaje sie kasa na koncie odbierajacego i nie ubywa na koncie sprzedajacego.
Wyglada to tak:

C/C++
class Transakcja
{
private:
    int wartosc;
   
public:
    Transakcja() { };
    int zwrot_transakcji(); //zwraca kwote transakcji;
    void wymiana_graczy( Gracz placacy, Gracz, int gotowka ); //tutaj jest ta funkcja nie dzialajaca
    void wymiana_bank( Gracz * pierwszy, Bank * drugi, int gotowka );
    void pozyczka();
    ~Transakcja() { };
};

void Transakcja::wymiana_graczy( Gracz placacy, Gracz dostajacy, int gotowka )
{
    cout << "Tutaj transakcja" << endl;
    placacy.zaplac( gotowka );
    dostajacy.dostan_kase( gotowka );
    cout << "Koniec transakcji" << endl;
}

Ta klasa przeprowadza transakcje. Jest ona skojarzona z klasą Gracz i klasa Rozgrywka (klasy są oskracane dla przejrzystosci)

C/C++
class Gracz
{
private:
    int numer_gracza;
    int konto;
    .
    vector < Zakupione_Gracza *> karty_gracza;
    Transakcja * wplyw_kasy;
   
public:
    Gracz( int, int );
    int rzut_koscia( Kosc * ); // rzuca koscia gracz
    int ruch_gracza( int, Kosc * );
    void kup_dzialke( int, int, int );
    int zaplac( int );
    int dostan_kase( int );
};

int Gracz::dostan_kase( int kasa )
{
    konto = konto + kasa;
}

int Gracz::zaplac( int ile_gotowki ) // funkcja ktora podaje do transakcji ilosc gotowki
{ cout << "Place" << endl;
    cout << nazwa << endl;
    konto = konto - ile_gotowki;
    cout << konto; //tutaj sie wszystko ładnie zmienia (**)
    cout << "zaplacilem" << endl;
    return ile_gotowki;
}

class Rozgrywka
{
private:
    Transakcja * proba;
    vector < Gracz > tab; //tablica do przechowywania graczy i ich danych
    Kosc * kostka; //Kostka nie mo¿e istnieæ bez pocz¹tku rozgrywki
   
protected:
   
public:
    .
    .
    .
};

Po wywołaniu funkcji na dole, stany kont graczy pozostają takie same jak przed transakcja, jednak w trakcie w (**) konto jest pomniejszone, ale tak jakby nie zapisuje tego do vecotra tab.
C/C++
Transakcja * nowa;
nowa->wymiana_graczy( tab[ 1 ], tab[ 0 ], gotowka );
P-110993
Moorfox
» 2014-05-28 01:20:13
Zaraz doczytam, ale zdaje mi się, że wywołujesz funkcje poprzez wskaźnik do której nie jest przypisany żaden adres obiektu ?

C/C++
class Rozgrywka
{
private:
    Transakcja * transakcje;
    vector < Gracz > tab; //tablica do przechowywania graczy i ich danych
    Kosc * kostka; //Kostka nie mo¿e istnieæ bez pocz¹tku rozgrywki
   
protected:
   
public:
    Gracz getGracz( int numer )
    {
        return tab[ numer - 1 ];
    }
    Transakcja getTrans()
    {
        return transakcje;
    }
    Rozgrywka()
    {
        transakcje = new Transakcja;
    }
    ~Rozgrywka()
    {
        delete transakcje;
    }
   
};

int main()
{
    Rozgrywka nowa;
    //Po utworzeniu paru graczy
    nowa.getTrans()->wymiana_graczy( nowa.getGracz( 1 ), nowa.getGracz( 2 ), 500 );
    return 0;
}

Nie jestem pewien jak ty to widzisz tzn gdzie wywolujesz poszczegolne funkcje
P-110995
kamilall234
Temat założony przez niniejszego użytkownika
» 2014-05-28 01:32:49
Wywołanie to jest w Rozgrywce.
P-110996
Moorfox
» 2014-05-28 01:34:01
To jeszcze miedzyinnymi
C/C++
void Transakcja::wymiana_graczy( Gracz & placacy, Gracz & dostajacy, int gotowka )
P-110997
kamilall234
Temat założony przez niniejszego użytkownika
» 2014-05-28 01:38:24
Ale wstyd :D zapomniałem o &. Teraz wszystko ok. Dzieki wielkie !
P-110998
1 « 2 »
Poprzednia strona Strona 2 z 2