c++ visual-studio-2008 visual-studio-2010

c++ - ¿Por qué std:: queue no soporta la función clear()?



visual-studio-2008 visual-studio-2010 (4)

Agregué esto a mi creciente lista de funciones ''make STL legible'':

template <typename T> void Clear(std::queue<T>& Queue) { Queue = std::queue<T>(); // Assign to empty queue }

Es solo una envoltura alrededor de la excelente respuesta de sellibitze, pero significa que no tengo que agregar un comentario cada vez que uso la técnica.

Tengo un requisito como este. Para una función, recibo entrada como un flujo de números. Quiero decir, la función sigue siendo llamada con un solo número en cada llamada. Estoy usando la cola para almacenar el flujo de números. Necesito procesar un conjunto de números recopilados solo cuando se cumple alguna condición. Si no se cumple la condición, necesito lanzar todos los elementos en la cola y luego comenzar a almacenar nuevos números en eso. Para vaciar la cola, no pude encontrar el método clear (). Así que estoy buceando como a continuación.

while(!q.empty()) q.pop();

Obtuve un algoritmo eficiente para borrar la cola en

¿Cómo borro la cola std :: eficientemente?

Mi pregunta es: ¿Por qué la cola no admite la función clear ()?

Cuando deque y vector son compatibles con el método clear (), ¿cuál es la dificultad técnica para admitirlo en la cola?

¿O es mi caso de uso anterior muy raro y por lo tanto no es compatible? Gracias.


Aparte de lo que ya se ha dicho, puede borrar una cola muy fácilmente:

queue<int> q; ... q = queue<int>(); // Assign an empty queue

o en C ++ 11

q = {};


Según http://www.cplusplus.com/reference/stl/queue/ ,

las colas se implementan como adaptadores de contenedores, que son clases que usan un objeto encapsulado de una clase de contenedor específica como su contenedor subyacente, proporcionando un conjunto específico de funciones miembro para acceder a sus elementos.

lo que significa que la cola usa un contenedor ya existente, y es realmente una interfaz para este contenedor como una cola FIFO.

Esto significa que las colas no deben borrarse. Si necesita borrar una cola, esto significa que realmente necesita usar un objeto que no es una cola y, por lo tanto, debe usar el tipo de contenedor subyacente real, siendo un deque de forma predeterminada.


queue es solo un adaptador para algún contenedor subyacente, por defecto es un deque , con función restringida (como se anotó aquí). Si desea la función completa, utilice el deque subyacente en lugar de la queue .