Usuwanie struktury
Ostatnio zmodyfikowano 2014-02-09 17:45
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 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 ) } }
int main() { 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 ); } } }
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? |
|
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 for( auto & bubble: vObjects ) { bubble.Move( 10, 10 ); }
a potem usunać elementy spełniające jakiś warunek vObjects.erase( std::remove_if( vObjects.begin(), vObjects.end(),[]( BulletBubble & b ) { return b.x > 200; } ), vObjects.end() );
|
|
« 1 » |