Heim > Backend-Entwicklung > C++ > Können Sie auf die zugrunde liegenden Container von STL-Container-Adaptern zugreifen?

Können Sie auf die zugrunde liegenden Container von STL-Container-Adaptern zugreifen?

Barbara Streisand
Freigeben: 2024-11-02 17:47:02
Original
356 Leute haben es durchsucht

Can You Access the Underlying Containers of STL Container Adaptors?

Zugriff auf zugrunde liegende Container von STL-Containeradaptern

Die STL-Bibliothek stellt verschiedene Containeradapter bereit, z. B. Stapel, Warteschlangen und Prioritätswarteschlangen. Diese Adapter bieten eine Schnittstelle für die Interaktion mit zugrunde liegenden Containern, es stellt sich jedoch die Frage: Gibt es eine standardisierte Möglichkeit, auf diese verborgene Ebene zuzugreifen?

Fehlen einer Standardzugriffsmethode

Leider definiert die STL keine Standardmethode zum Abrufen des nativen Containers von Stack, Queue oder Priority_queue. Die Funktion _Get_container(), die in bestimmten Implementierungen wie VS2008 verfügbar ist, ist plattformspezifisch und nicht Teil des C-Standards.

Zugriff auf zugrunde liegende Container

Eine Problemumgehung besteht darin: Definieren Sie benutzerdefinierte Vorlagen, die den gewünschten Containeradapter akzeptieren und den zugrunde liegenden Container mithilfe der Vorlagenspezialisierung extrahieren. Dieser Ansatz kann beispielsweise für Stack- und Warteschlangenadapter verwendet werden:

<code class="cpp">template<typename T>
using Deque = std::deque<T>;
template<typename T>
using Stack = std::stack<T, Deque<T>>;
template<typename T>
std::ostream& operator<<(std::ostream& os, const Stack<T>& s) {
  // Output the contents of the underlying deque
  os << "[";
  for (const auto& elem : s.container()) {
    os << " " << elem;
  }
  os << " ]";
  return os;
}
Nach dem Login kopieren

Prioritätswarteschlangenzugriff

Der Zugriff auf den zugrunde liegenden Container einer Prioritätswarteschlange ist schwieriger bis hin zur internen Umsetzung. Eine clevere Problemumgehung besteht jedoch darin, eine verschachtelte Unterklasse mit Zugriff auf das private Containermitglied zu definieren:

<code class="cpp">template <typename T, typename S, typename C>
struct PriorityHack : private priority_queue<T, S, C> {
  using priority_queue<T, S, C>::c;
};
template <typename T, typename S, typename C>
S& container(priority_queue<T, S, C>& pq) {
  return PriorityHack<T, S, C>::c(pq);
}</code>
Nach dem Login kopieren

Dadurch können Sie den nativen Container einer Prioritätswarteschlange abrufen mit:

<code class="cpp">priority_queue<int> pq;
vector<int>& tasks = container(pq); // Assign the underlying vector to tasks</code>
Nach dem Login kopieren

Diese Lösung bietet einen standardisierten Ansatz für den Zugriff auf die zugrunde liegenden Container von Stack-, Queue- und Priority_Queue-Adaptern, unabhängig von der Implementierungsplattform.

Das obige ist der detaillierte Inhalt vonKönnen Sie auf die zugrunde liegenden Container von STL-Container-Adaptern zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage