Accès au conteneur sous-jacent des adaptateurs de conteneur STL
La bibliothèque de modèles standard (STL) fournit des adaptateurs de conteneur tels que la pile, la file d'attente et la file d'attente prioritaire, qui offrent une interface pratique tout en fournissant une couche abstraite sur le conteneur sous-jacent. Cependant, il manque une méthode standardisée pour accéder au conteneur sous-jacent dans ces adaptateurs.
Implémentation actuelle
Dans certaines implémentations de la STL, telles que Visual de Microsoft Studio 2008, une méthode non standard appelée _Get_container() est disponible pour la pile et la file d'attente. Cependant, aucune méthode de ce type n'existe pour Priority_queue.
Accès au conteneur sous-jacent dans Priority_queue
Malgré l'absence de méthode standard, une solution de contournement a été conçue :
<code class="cpp">template <class T, class S, class C> S& Container(priority_queue<T, S, C>& q) { struct HackedQueue : private priority_queue<T, S, C> { static S& Container(priority_queue<T, S, C>& q) { return q.*&HackedQueue::c; } }; return HackedQueue::Container(q); }</code>
Ce code définit une fonction d'assistance Container() qui utilise une classe privée imbriquée HackedQueue pour accéder au conteneur sous-jacent c.
Utilisation
Avec ceci solution de contournement, vous pouvez accéder au conteneur sous-jacent de priorité_queue comme suit :
<code class="cpp">priority_queue<SomeClass> pq; vector<SomeClass>& tasks = Container(pq);</code>
Documentation officielle
La documentation officielle de la STL peut être trouvée sur le lien suivant :
Conclusion
Bien qu'il n'existe pas de méthode standard pour accéder au conteneur sous-jacent des adaptateurs de conteneur STL, la solution de contournement fournie offre une solution spécifiquement pour priorité_queue. Pour la pile et la file d'attente, la méthode non standard _Get_container() peut être utilisée si elle est disponible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!