2010-06-01 21 views
7

Estoy intentando usar BOOST_FOREACH para iterar a través de std :: queue. Pero no es iteradores en esa causa clase Tengo un error:Iterar a través de la cola estándar

std::queue<std::string> someList; 
BOOST_FOREACH(std::string temp, someList) 
{ 
    std::cout << temp; 
} 

>no matching function for call to begin(...) 
>no type named ‘iterator’ in ‘class std::queue<std::basic_string<char> >’ 

que necesito en estructura como: el primero llega, el primero desaparece.

+1

Posible duplicado: http://stackoverflow.com/questions/1259099/ –

Respuesta

19

std::deque admite inserción y eliminación eficientes al principio y al final de la estructura de datos. Puede hacer operaciones de cola manualmente usando push_back y pop_front.

Una cola utiliza un deque internamente de forma predeterminada. Es un contenedor que solo expone las operaciones de cola (de ahí por qué no puede iterar sobre él). Hace un tiempo pedí un similar question, y la mejor respuesta me dio una buena idea del uso real de std::queue. Uno debe usar std::queue no porque uno necesita una cola, sino para dejar en claro que solo las operaciones tipo cola son legales en una estructura de datos dada. Parece que necesita más libertad que eso, así que vaya con deque, list u otra estructura con O (1) inserte y elimine en ambos extremos.

+0

Pensé que la cola es más simple (perf + mem) que deque. Pero después de su respuesta (y verificado a través del archivo de encabezado), creo que no hay diferencia en el rendimiento y la memoria independientemente de la cola o deque, excepto las restricciones sobre algunas operaciones en el caso de Queue. – Makesh

4

puede utilizar std :: lista con push_front y pop_back

1

std::queue es un adaptador de recipiente. Utiliza std::deque como el contenedor subyacente predeterminado. El acceso a este contenedor no es posible y, por lo tanto, no es una iteración de ninguna manera.

La mejor manera es usar un std::deque o std::list y administrar el comportamiento de la cola usted mismo. Posiblemente proporcione su propio envoltorio a su alrededor.

Cuestiones relacionadas