Cita:
Iniciado por joticajulian r0d gracias por el comentario, pero no me queda claro qué clases hay en c++ que sirvan como pilas. En java he usado ArrayList, pero en c++ no sé.
¿qué se usa en c++?
Saludos.
Es igual que en java o en c#: existen ya varios contenedores, según lo que querremos hacer. Y luego, hay
algoritmos (#include <algorithm>) que se aplican a estos contenedores.
. La STL define 10 contenedores (vector, list, stack, queue, dequeue, priority_queue, map, set, multi_map y multi_set).
. TR2* añade algunos, no me acuerdo exactamente pero 3 o 4 me parece
.
boost** lleva una decena más.
Por ejemplo, la pila básica es la std::stack. Las filas son std::queue y std::dequeue. La diferencia con java es que en c++, estos contenedores usan la "templatización", mientras que java usa la herencia (gracias a el objeto "raíz": java.lang.object). Y no parece pero es una diferencia importante. Por ejemplo, el hecho que en java, cada objeto hereda de Object es un gasto importante: los destructores de cada objeto tiene que ser virtual, y entonces ¡bam! cada objeto tiene que poseer una vtable. El hecho de utilizar un template permite cambiar el comportamiento del contenedor gracias al paradigma "alocation, trait, policy".
Todo lo que estoy hablando aquí es lo que llaman el
c++ moderno. El próximo estándar del c++ va en este sentido, es por eso que es importante aprender el c++ de esta manera. Además, el comité abandono toda la parte de "programación por contrato", que hubiera permitido tener un concepto de interfaz en c++ bien claro, y acercarse al mundo del java.
* TR2 es algo como una "parte non oficial" de la STL, que se usa para probar cosas, pero en el próximo estándar c++0x, cual fecha de "oficialización" esta prevista para fin 2011, incluirá casi todo el TR-2.
** boost es una librería distinta de la STL (standard template library), pero usa paradigmas compatibles con la STL ( allocator, trait, policy, RAII, NVI, iterator, etc...). Así que por ejemplo, los contenedores de boost pueden ser utilizados con los algoritmos de la STL.