Est-ce que la pile dans le STL C++ expose les itérateurs du conteneur sous-jacent ou devrais-je utiliser ce conteneur directement?Est-ce que std :: stack expose des itérateurs?
29
A
Répondre
34
La pile n'a pas d'itérateurs, par définition de pile. Si vous avez besoin d'une pile avec des itérateurs, vous devrez l'implémenter vous-même au-dessus d'un autre conteneur (std :: list, std :: vector, etc.). Stack doc is here.
P.S. D'après un commentaire d'Iraimbilanja, std :: stack utilise par défaut std :: deque pour l'implémentation.
1
10
Si vous avez besoin d'une pile avec des itérateurs, vous avez deux choix. std :: vector en utilisant push_back(), pop_back(). std :: deque avec soit push_back()/pop_back() ou push_front()/pop_front().
0
Le std::stack
expose son conteneur sous-jacent (et donc ses itérateurs) à sous-classes via son interface protégée. Donc, si vous voulez y accéder, vous pouvez étendre un peu le 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';
}
sortie:
2 5 3 7 9
Questions connexes
- 1. C++ - Que signifie "Stack automatique"?
- 2. Tri des itérateurs PHP
- 3. Obtention d'un index dans un vecteur en utilisant des itérateurs
- 4. Que signifie chiffres dans Stack Trace
- 5. Expose DependencyProperty
- 6. Expose une bibliothèque de classes en tant que service WCF
- 7. Qu'est-ce que std :: safe_string?
- 8. WPF UserControl expose ActualWidth
- 9. Expose plusieurs collections en tant que collection unique
- 10. Quel est le moyen le plus propre de marcher et de désenvoyer un vecteur std :: en utilisant des itérateurs?
- 11. L'enregistrement dans COM + expose moins d'interfaces que Regsvr32
- 12. Expose un objet .net spécifique en tant que JSON
- 13. itérateurs vecteur casting
- 14. Créer mes propres itérateurs
- 15. Java Stack/Nest Count
- 16. .Net 3.5 CompactFramework Stack
- 17. OpenGL Alpha Stack
- 18. Comment Stack Overflow reflète-t-il ce que vous tapez?
- 19. en utilisant des itérateurs de chaînes sur char * dans boost regex
- 20. DevC++ (Mingw) Stack Limit
- 21. Py3K conservation de la mémoire en retournant itérateurs plutôt que des listes
- 22. Evénement Expose OnSelectedIndexChanged dans CompositeControl
- 23. Fenêtre Redisplay Stack Trace
- 24. Objective-C Bonjour/TCP Stack
- 25. 'Enfin' Bloc dans les itérateurs
- 26. Touches/Valeurs Fonctionnalité pour les itérateurs en C++
- 27. mise en œuvre itérateurs vide
- 28. Comment fusionner deux itérateurs python?
- 29. Problème lors de la désactivation des itérateurs vérifiés dans vs2008 SP1 (_HAS_ITERATOR_DEBUGGING = 0)
- 30. Stack vs. Heap in .NET
+1. notez aussi que std :: stack utilise par défaut std :: deque comme son implémentation, ce qui pourrait être un bon choix pour l'implémentation par défaut d'un iterstack. Une autre question est, * pourquoi * voulez-vous une pile iterable et non, disons, une deque rectiligne –
10x, je ne savais pas que – Drakosha