Maison > développement back-end > C++ > Comment puis-je accéder au conteneur sous-jacent d'un adaptateur de conteneur STL ?

Comment puis-je accéder au conteneur sous-jacent d'un adaptateur de conteneur STL ?

Susan Sarandon
Libérer: 2024-11-03 12:42:02
original
982 Les gens l'ont consulté

How Can I Access the Underlying Container of an STL Container Adaptor?

Accès au conteneur sous-jacent des adaptateurs de conteneur STL

Adaptateurs de conteneur dans la bibliothèque de modèles standard C (STL), tels que la pile, la file d'attente et Priority_queue, fournit une interface pratique au-dessus des conteneurs sous-jacents comme deque ou vector. Cependant, obtenir une référence au conteneur sous-jacent, nécessaire pour des opérations personnalisées, peut être difficile.

Existe-t-il une méthode standard ?

Non, il n'y a pas de norme méthode pour accéder directement au conteneur sous-jacent à partir de ces adaptateurs. La méthode _Get_container() mentionnée ne fait pas partie du standard C et peut varier en fonction de l'implémentation.

Solution de contournement courante

Une solution de contournement courante consiste à utiliser la spécialisation de modèle, comme suit :

<code class="cpp">template <class Type>
struct ContainerAdapter {
  static Type& container(const Type& adapter) {
    return adapter; // Assumes underlying container is of the same type
  }
};</code>
Copier après la connexion

En spécialisant ce modèle pour chaque type d'adaptateur spécifique, nous pouvons accéder au conteneur sous-jacent. Par exemple :

<code class="cpp">template <>
struct ContainerAdapter<std::stack<int>> {
  static std::deque<int>& container(const std::stack<int>& stack) {
    return stack.*&stack::_deque; // Internal implementation hack
  }
};</code>
Copier après la connexion

Implémentation personnalisée pour priorité_queue

Dans le cas de priorité_queue, une approche similaire peut être implémentée à l'aide d'un modèle de structure :

<code class="cpp">template <class T, class S, class C>
struct PriorityQueueAdapter {
  static S& container(priority_queue<T, S, C>& pq) {
    // Use a type trick to access private member
    struct Inner : private priority_queue<T, S, C> {
      static S& container(priority_queue<T, S, C>& pq) {
        return pq.*&Inner::c;
      }
    };
    return Inner::container(pq);
  }
};</code>
Copier après la connexion

Documentation officielle

La documentation officielle de la bibliothèque standard C est disponible sur le site Web ISO/IEC : https://www.iso.org/standard/74983. html

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal