[C++] Usuwanie elementów w vector
Ostatnio zmodyfikowano 2011-12-24 14:26
SeaMonster131 Temat założony przez niniejszego użytkownika |
[C++] Usuwanie elementów w vector » 2011-12-24 13:43:43 Witam, Wesołych Świąt ;) Kurcze, męczę się i męczę, i nie moge dojść, dlaczego: int IDpocisku = 0;
class CPocisk { public: int ID; };
vector < CPocisk > pocisk;
CPocisk p; IDpocisku++; p.ID = IDpocisku; pocisk.push_back( p );
pocisk.erase( pocisk.begin() + pocisk[ i ].ID - 1 );
w tym kodzie, usuwają się wszystkie elementy od danego elementu do końca? A powinien tylko jeden element się usunąć według mnie. |
|
ison |
» 2011-12-24 13:55:05 z tego co widzę to kod wydaje się ok, zgaduję, że problem leży w pętli for, w której robisz pocisk.erase( pocisk.begin() + pocisk[ i ].ID - 1 );
|
|
|
pekfos |
» 2011-12-24 14:12:05 jak usuwasz element to w jego miejsce wchodzi następny po nim. Uwzględniaj to w pętli. Usuwając przez ID szukaj elementu o danym ID i usuń go. |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-12-24 14:14:24 Dokładnie jest tak: for( int i = 0; i < monster.size(); i++ ) { for( int ii = 0; ii < pocisk.size(); ii++ ) { if( pocisk[ ii ].x >= monster[ i ].x && pocisk[ ii ].x <= monster[ i ].x + 70 && pocisk[ ii ].y >= monster[ i ].y && pocisk[ ii ].y <= monster[ i ].y + 100 ) { pocisk.erase( pocisk.begin() + pocisk[ ii ].ID - 1 ); } } }
|
|
pekfos |
» 2011-12-24 14:16:42 czyli nie dobrze. użyj jakiegoś find() |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-12-24 14:23:26 Dzięki @pekfos, wpadłem na takie cos: int jaki;
jaki = ii; pocisk.erase( pocisk.begin() + jaki );
I działa :) |
|
ison |
» 2011-12-24 14:23:50 @SeaMonster jak usuwasz jakiś element to musisz pamiętać o tym aby dalszym elementom zmniejszyć ID o 1 bo ich pozycja w vectorze się zmieniła, ogólnie trochę słabe podejście, ja bym to zrobił na liście, mógłbyś wtedy wyrzucać elementy w czasie stałym
//edit ok, już zedytowałeś wiadomość :) |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2011-12-24 14:26:14 O tej liście sobie poczytam :) Jak na razie, działa dobrze ;) Dzięki Wam. Wesołych świąt! |
|
« 1 » |