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:
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