¿Std :: stack expone iteradores?

¿ std::stack en C ++ STL expone cualquier iterador del contenedor subyacente o debería usar ese contenedor directamente?

Stack no tiene iteradores, por definición de stack. Si necesita astackr con iteradores, tendrá que implementarlo usted mismo encima de otro contenedor (std :: list, std :: vector, etc.). Stack doc está aquí .

PS De acuerdo con un comentario que obtuve de Iraimbilanja, std :: stack usa por defecto std :: deque para su implementación.

Si necesita una stack con iteradores, tiene dos opciones. std :: vector usando push_back (), pop_back (). std :: deque con push_back () / pop_back () o push_front () / pop_front ().

The std::stack expone su contenedor subyacente (y por lo tanto iteradores) a las subclases a través de su interfaz protegida. El objeto de contenedor subyacente de std::stack corresponde al miembro de datos (protegido) c . Entonces, si quieres acceder a ellos, puedes extender std::stack un poco.

 template> class iterable_stack : public std::stack { using std::stack::c; public: // expose just the iterators of the underlying container auto begin() { return std::begin(c); } auto end() { return std::end(c); } auto begin() const { return std::begin(c); } auto end() const { return std::end(c); } }; int main() { iterable_stack st; st.push(2); st.push(5); st.push(3); st.push(7); st.push(9); for(auto i: st) std::cout << i << ' '; std::cout << '\n'; } 

Salida:

 2 5 3 7 9 

En las documentaciones de SGI , MSDN y GNU , la stack no proporciona un iterador.