Iterando a través de contenedores STL y eliminando / agregando múltiples elementos

Uno de los errores más frecuentes que se producen en mi código es que los contenedores STL se modifican durante un ciclo.

Los elementos se eliminan o se agregan durante una ejecución de bucle, por lo que generalmente me encuentro con excepciones fuera de límites.

Mis bucles for usualmente se ven así:

for (auto& Item : Items) { // Will not work when Items container is modified
    //... loop logic
}

Cuando se pueden eliminar varios elementos, uso esta monstruosidad:

for (int Index=Items.size()-1;Index<=0;Index--) {
    if (Index<Items.size()) { //Because multiple items can be removed in a single loop
        //... loop logic
    }
}

Esto se ve mal y me hace sentir mal usar esa segunda opción. La razón por la que se pueden eliminar varios elementos se debe a eventos, donde un solo evento puede eliminar cualquier número de elementos.

Aquí hay un pseudo código para ilustrar cuando esto ocurre:

// for each button in vector<button> {
// process button events
// event adds more buttons to vector<button>
// *ERROR* vector<button> is modified during loop.
// }

En otro ejemplo, imagine un vector con los siguientes elementos:

// 0 1 2 3 4 5 6 7 8 9

Comenzamos nuestro bucle en0 y vaya elemento por elemento. A4, Quiero eliminar elementos1,4 y9 así que no podemos usar un bucle normal aquí.

Respuestas a la pregunta(4)

Su respuesta a la pregunta