001
10.06.2006, 02:14 Uhr
Spacelord
Hoffnungsloser Fall
|
Hi, du musst deinen iterator mit dem Rückgabewert von erase aktualisieren.Dein iterator ist nach erase ungültig wodurch auch deine for Schleife mit it++ nicht funktionieren wird. erase liefert dir nen iterator auf das erste Element hinter dem gerade entfernten oder end. Damit solltest du dir ne while Schleife basteln.
remove_if könnte auch interessant für dich sein. Kannst du dir ja mal anschauen.
C++: |
#include <iostream> #include <vector> #include <algorithm> #include <functional>
using namespace std;
int main() { vector<int> int_vec; for(int i=0;i<10;++i) int_vec.push_back(i); copy(int_vec.begin(),int_vec.end(),ostream_iterator<int>(cout," ")); cout<<endl;
vector<int>::iterator it = int_vec.begin(); while(it != int_vec.end()) { it = int_vec.erase(it); copy(int_vec.begin(),int_vec.end(),ostream_iterator<int>(cout," ")); cout<<endl; }; cout<<endl;
for(int i=0;i<10;++i) int_vec.push_back(i); //ungerade Elemente "entfernen" it = remove_if(int_vec.begin(),int_vec.end(),bind2nd(modulus<int>(),2)); int_vec.erase(it,int_vec.end());
copy(int_vec.begin(),int_vec.end(),ostream_iterator<int>(cout," ")); cout<<endl;
return 0; }
|
Gruss Spacelord -- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes. Dieser Post wurde am 10.06.2006 um 02:28 Uhr von Spacelord editiert. |