¿La pila en C++ STL expone cualquier iterador del contenedor subyacente o debería usar ese contenedor directamente?¿std :: stack expone iteradores?
29
A
Respuesta
34
La pila no tiene iteradores, por definición de pila. Si necesita apilar con iteradores, tendrá que implementarlo usted mismo encima de otro contenedor (std :: list, std :: vector, etc.). Stack doc is here.
P.S. De acuerdo con un comentario que recibí de Iraimbilanja, std :: stack utiliza por defecto std :: deque para su implementación.
1
10
Si necesita una pila con iteradores, tiene dos opciones. std :: vector usando push_back(), pop_back(). std :: deque con push_back()/pop_back() o push_front()/pop_front().
0
std::stack
expone su contenedor subyacente (y por lo tanto iteradores) a subclases a través de su interfaz protegida. Entonces, si desea acceder a ellos, puede ampliar un poco el std::stack
.
template<typename T, typename Container = std::deque<T>>
class iterable_stack
: public std::stack<T, Container>
{
using std::stack<T, Container>::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<int> 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
Cuestiones relacionadas
- 1. ¿Por qué std :: stack usa std :: deque de forma predeterminada?
- 2. Copie std :: stack en un estándar :: vector
- 3. Stack Stack
- 4. Convertir std :: par de iteradores para aumentar :: iterator_range
- 5. std :: list <> :: splice invalida iteradores. ¿Razón fundamental?
- 6. LISTA DE ITERADORES CORRUPTED en el constructor std :: string
- 7. Inicializar std :: array con un rango (par de iteradores)
- 8. Obtener una subcadena de `std :: string` entre dos iteradores
- 9. ¿Por qué no puedo crear una std :: stack de std :: ifstreams?
- 10. Comparar iteradores, C++
- 11. iteradores bidireccionales en unordered_map?
- 12. ¿Por qué Ruby expone símbolos?
- 13. Escribiendo stl compatible con iteradores
- 14. ¿Se pueden usar iteradores de entrada donde se esperan iteradores de ida?
- 15. Inserters para STL stack y priority_queue
- 16. Iteradores entendimiento en la STL
- 17. Iteradores a matrices de diferentes tamaños
- 18. Cómo aplanar los iteradores de contenedores anidados?
- 19. TDD: ¿Qué métodos expone para las pruebas unitarias?
- 20. C++ shared_ptr of stack object
- 21. ¿Por qué std :: distance no funciona en la combinación de iteradores const y nonconst?
- 22. ¿Cuál es la diferencia entre Call Stack y Stack Trace?
- 23. algoritmo de copia con cuatro iteradores
- 24. devolver iteradores de C++
- 25. ¿Qué son iteradores, C++?
- 26. vector iteradores de reparto
- 27. Ordenando Iteradores de PHP
- 28. Creando mis propios iteradores
- 29. ¿Cómo se puede depurar 'Stack smashing detected'?
- 30. Eficiencia de iteradores en unordered_map (C++)
+1. tenga en cuenta también que std :: stack usa de manera predeterminada std :: deque como su implementación, por lo que esta podría ser una buena opción para la implementación predeterminada de un iterstack también. Otra pregunta es, * por qué * quieres una pila iterable y no, por ejemplo, una deque –
10x, no sabía que – Drakosha