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

Usuwanie struktury

Ostatnio zmodyfikowano 2014-02-09 17:45
Autor Wiadomość
Grzyboo
Temat założony przez niniejszego użytkownika
Usuwanie struktury
» 2014-02-09 15:49:42
Witam, mam problem z usuwaniem struktur.
Daje tutaj bardzo uproszczony kod, który pokaże, o co dokładnie chodzi

C/C++
struct Bullet
{
    double x;
    double y;
   
    Bullet( double i_x = 0, double i_y = 0 )
        : x( i_x )
        , y( i_y )
    { }
   
    void Move( double move_x = 0, double move_y = 0 )
    {
        x += move_x;
        y += move_y;
       
        if( x > 200 )
        //delete object
    }
}


int main()
{
    // blabla
   
    typedef std::vector < BulletBubble > TDefBulletBubble;
    TDefBulletBubble vObjects;
   
    while( GameWindow.isOpen() )
    {
        sf::Event event;
        while( GameWindow.pollEvent( event ) )
        {
            if( event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left )
            if( _FuncLeftMouseButton() )
            {
                vObjects.push_back( Bullet( StartPosX, StartPosY ) );
            }
        }
       
        for( TDefBulletBubble::iterator i = vObjects.begin(); i != vObjects.end(); ++i )
        {
            i->Move( 10, 10 );
            GameWindow.draw( Sprite );
        }
    }
   
    // blabla
}

I teraz pytanie:
1. Jak zastąpić "//delete object", aby usuwało dany obiekt?
2. Czy ta metoda z wektorami jest dobra? Czy może jednak jest inna metoda, na robienie pętli dla każdego stworzonego obiektu?
P-104316
Monika90
» 2014-02-09 17:45:04
1. Jak zastąpić "//delete object", aby usuwało dany obiekt?
Usuwało z czego? Jak chcesz usuwać z wektora, to to musi być operacja na wektorze, a nie na obiekcie.

2. Czy ta metoda z wektorami jest dobra? Czy może jednak jest inna metoda, na robienie pętli dla każdego stworzonego obiektu?

Można dwuetapowo, najpierw coś zrobić z każdym elementem wektora
C/C++
for( auto & bubble: vObjects )
{
    bubble.Move( 10, 10 );
}

a potem usunać elementy spełniające jakiś warunek
C/C++
vObjects.erase( std::remove_if( vObjects.begin(), vObjects.end(),[]( BulletBubble & b ) { return b.x > 200; } ), vObjects.end() );
P-104324
« 1 »
  Strona 1 z 1