Usuwanie danych wskaźników z wektora
Ostatnio zmodyfikowano 2016-11-24 15:12
krainamodu Temat założony przez niniejszego użytkownika |
Usuwanie danych wskaźników z wektora » 2016-11-24 14:46:49 Witam, mam stworzony wektor przechowujący kilka wskaźników na obiekty i nie wiem jak usunąć element z wektora o podanych wartościach. Tutaj jest uproszczony przykład programu: #include<vector> #include<iostream> #include<algorithm> using namespace std; struct complex { int im; int re; }; complex * fill( int im, int re ) { complex * a = new complex(); a->im = im; a->re = re; return a; } int main() { vector < complex *> vec; vec.push_back( fill( 1, 5 ) ); vec.push_back( fill( 26, 4 ) ); vec.push_back( fill( 26, 4 ) ); vec.push_back( fill( 15, 75 ) ); complex * a = new complex(); a = fill( 26, 4 ); vec.erase( remove( vec.begin(), vec.end(), a ), vec.end() ); for( auto it: vec ) { cout << "Im: " << it->im << " Re: " << it->re << endl; } vec.clear(); cin.get(); } |
|
j23 |
» 2016-11-24 15:08:31 Nie działa, bo remove porównuje wskaźniki, a nie wartości. Użyj remove_if ze zdefiniowanym odpowiednio predykatem. |
|
Monika90 |
» 2016-11-24 15:12:12 Dlaczego jest to wektor wskaźników? To tylko zmniejsza wydajność, nic nie dając w zamian. A jeśli już musisz mieć wektor wskaźników, to powinien być wektor inteligentnych wskaźników, np: std::vector<std::unique_ptr<complex>>, uniknął byś wtedy wycieku pamięci takiego jak tu: complex * a = new complex(); a = fill( 26, 4 );
Ale w tym przypadku nie powinien to być wektor wskaźników, co rozwiąże również ten problem vec.erase( remove( vec.begin(), vec.end(), a ), vec.end() );
|
|
« 1 » |