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

[C++] Usuwanie elementów w vector

Ostatnio zmodyfikowano 2011-12-24 14:26
Autor Wiadomość
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:

C/C++
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.
P-46211
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
C/C++
pocisk.erase( pocisk.begin() + pocisk[ i ].ID - 1 );
P-46212
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.
P-46216
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2011-12-24 14:14:24
Dokładnie jest tak:

C/C++
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 );
        }
    }
   
   
}
P-46218
pekfos
» 2011-12-24 14:16:42
czyli nie dobrze. użyj jakiegoś find()
P-46219
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2011-12-24 14:23:26
Dzięki @pekfos, wpadłem na takie cos:
C/C++
int jaki;

//w tej pętli:

jaki = ii;
pocisk.erase( pocisk.begin() + jaki );

I działa :)
P-46221
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ść :)
P-46222
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!
P-46223
« 1 »
  Strona 1 z 1