Itérateur sur string et str.erase
Salut à tous,
je débute sur C++,
à chaque fois que j'ai un problème je cherche sur le net l'erreur que m'affiche mon compilateur pour comprendre d'où vient mon erreur, mais là je sèche
je cherche à manipuler des string par le biais d'un itérateur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
{
string str1("abcd");
string str2("xyz");
string::iterator it(str1.begin());
cout << *it << endl; // affiche 'a'
str1.erase(it); // supprime 'a'
cout << str1 << endl; // affiche "bcd"
str1.insert(it, str2.begin(), str2.end()); // insert "xyz" au début de "bcd"
cout << str1 << endl; // affiche donc "xyzbcd"
cout << *it << endl; // affiche 'b' donc l'itérateur pointe sur 'b'
str1.erase(it); // devrait donc supprimer 'b'
cout << str1 << endl; // mais ici il affiche "yzbcd", il a donc supprimé 'x' !?!?
} |
d'autant plus que j'ai droit à une erreur d'accès à la mémoire à la fin de l’exécution du programme... jusqu'à un core dumped...
je compile avec g++, mais il n'affiche aucune erreur à la compilation
quelqu'un aurait-il une réponse à ce comportement particulier de l'itérateur ?
Merci.