Expressió: iterador vectorial no incrementable error en suprimir l'element de l'interior del contenidor

Expression Vector Iterator Not Incrementable Error Deleting Element From Inside Container



Actualment, es produeix un error en temps d'execució quan s'utilitza el contenidor per suprimir elements

auto it1 = ivec.begin() while (it1 != ivec.end()){ if (*it1 % 2 == 0) ivec.erase(it1) ++it1 }

Unes quantes línies de codi, la primera vegada que s’utilitza l’operació d’esborrat del contenidor, la intenció és recórrer el contenidor de principi a fi, si es compleix
* it1% 2 == 0 per executar l'operació i augmentar el punter it1 al següent element, el resultat és un error:
imatge



Vaig estudiar detingudament l’esborrat, Es troba que l'esborrat té un valor de retorn, que apunta a l'iterador després de l'element suprimit . I executar Després d’esborrar-lo, farà que l’iterador, la referència i el punter després del punt de supressió no siguin vàlids , Per tant, es produeix un error en executar a ++ it1.
En el futur, s’hauria de prestar especial atenció a diverses situacions en què el contenidor provocaria un error en l’iterador.
Per tant, l’enfocament correcte:



auto it1 = ivec.begin() while (it1 != ivec.end()){ if (*it1 % 2 == 0) it1=ivec.erase(it1) //Note here ++it1 }

referència: https://blog.csdn.net/keyboardfucker/article/details/52069066