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

Allegro 5 budowa gier

Ostatnio zmodyfikowano 2013-04-12 22:16
Autor Wiadomość
aaadam
Temat założony przez niniejszego użytkownika
» 2013-04-06 18:49:39
tam wyżej jest kod gdy wciska się "z" dodaje do wektora nowy obiekt OBJ.push_back() i rysuje nowy pocisk gdy zmienna tego pocisku dochodzi do y=0 uruchamiam OBJ.pop_back() lub OBJ.erase(iterator) i niewiem czemu program sie zacina ;/
P-80088
hincu
» 2013-04-06 21:43:44
po usunieciu zmniejsz iterator o 1, to powinno pomoc to jest prosty wyciek pamieci
P-80107
Monika90
» 2013-04-06 23:36:24
Pętla takiej postaci:
C/C++
for( itP = Pociski.begin(); itP != Pociski.end(); itP++ )
{
    if( /*warunek*/ )
    {
        Pociski.erase( itP );
    }
}
jest nieprawidłowa, ponieważ erase unieważnia iterator.

po usunieciu zmniejsz iterator o 1, to powinno pomoc to jest prosty wyciek pamieci
To jakieś bzdury.

Prawidłowo będzie tak:
C/C++
itP = Pociski.begin();
while( itP != Pociski.end() )
{
    if( /*warunek*/ )
    {
        itP = Pociski.erase( itP );
    }
    else
         ++itP;
   
}

DOPISANE:
Ewentualnie można zrobić tak:
C/C++
Pociski.erase( std::remove_if( Pociski.begin(), Pociski.end(),[]( const Pocisk & p ) { return p.y <= 0; } ), Pociski.end() );
Ale czy to jest lepsze? Jest to kwestią dyskusyjną. Może być różnica w wydajności.
P-80116
hincu
» 2013-04-07 10:54:10
monika to nie bzdury, bzdura to ty jestes, KAZDY sposob jest dobry jesli dziala, ty uzylas petli while a on for, wiec kazalem mu odjac element by nie byl dodawany przy nastepnym ruchu petli... w czym widzisz problem pani pro programistko? O_O
P-80130
Monika90
» 2013-04-07 12:32:44
KAZDY sposob jest dobry jesli dziala
Zaproponowany przez Ciebie nie działa.
vec.erase( i );
 unieważnia iterator i. Nieważnego iteratora nie można zmniejszyć o 1, nie można porównać z vector.end(), itp. Jedyne co można, to zniszczyć go, albo przypisać mu nową wartość:
i = vec.erase( i );
.
P-80145
aaadam
Temat założony przez niniejszego użytkownika
» 2013-04-07 14:53:15
Dziękuję bardzo teraz działa z wektorami nie miałem praktycznie styczności więcej z listami pewnie będę miał więcej problemów bo dopiero zaczynam przygodę z programowaniem gier 2d.
P-80153
pekfos
» 2013-04-07 14:55:18
vec.erase( i );
 unieważnia iterator i.
Niekoniecznie.
P-80155
hincu
» 2013-04-07 15:20:22
pekfos z kobieca logika nie wygrasz
P-80159
1 « 2 » 3 4 5
Poprzednia strona Strona 2 z 5 Następna strona