Un truco que uso en situaciones peludas es agregar una bandera 'en desuso' a los artículos en la pila. Cuando quiero 'eliminar' un elemento, simplemente levanto esa bandera (y elimino todos los recursos que haya tomado el objeto). Luego, al hacer pop() elementos, simplemente verifico si la bandera está levantada, y aparece de nuevo en un bucle hasta que se encuentra un elemento no desaprobado.
do
{
obj = mQueue.Pop();
} while (obj.deprecated);
Puede gestionar su propio elemento de conteo para saber cuántos elementos 'reales' son todavía en la cola, y, obviamente, el bloqueo debe ser empleado si esto es necesario para la solución multi-hilo.
Descubrí que para las colas que tienen un flujo constante a través de ellas - elementos empujados y reventados - es mucho más eficiente manejar esto de la manera más rápida posible (pagando O (1) por quitar un artículo del medio) y en cuanto a la memoria, si el objeto retenido es pequeño, es casi irrelevante si los elementos fluyen a un ritmo razonable.
Es esta tarea? Si es así, ignore mi respuesta, probablemente no sea lo que necesita, vaya con la respuesta de Reed Copsey: http://stackoverflow.com/questions/748387/how-to-remove-a-stack-item-which-is-not -on-the-top-of-the-stack-in-c/748409 # 748409 –
No, no es tarea, es solo un pequeño proyecto privado con un caso muy especial ^^ – Enyra
¿Qué hay de malo en hacer estallar la pila y tirar esa pila? ¿valor? – belgariontheking