Zugriff auf den zugrunde liegenden Container in STL-Containeradaptern
Zugriff auf den zugrunde liegenden Container in STL-Containeradaptern wie Stack, Queue und Priority_queue, ist seit langem ein Thema der Neugier. Auch wenn es möglicherweise keine offizielle Standardmethode gibt, kann eine clevere Technik namens „Container-Hacking“ eingesetzt werden.
Container-Hacking
Dieser Ansatz beinhaltet die Erstellung einer Hilfsklasse abgeleitet vom jeweiligen Containeradapter. Diese abgeleitete Klasse stellt eine statische Container()-Methode bereit, die einen Verweis auf den zugrunde liegenden Container zurückgibt.
Betrachten Sie den folgenden Codeausschnitt:
<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); } int main() { priority_queue<SomeClass> pq; vector<SomeClass>& tasks = Container(pq); return 0; }</code>
Hier die HackedQueue-Struktur, die von Priority_Queue erbt , macht die Container()-Methode verfügbar. Diese Methode gewährt Zugriff auf den zugrunde liegenden Vektor, der die Elemente in der Prioritätswarteschlange speichert.
Nicht-Standard-Ansätze
In Visual Studio 2008 stellen bestimmte Containeradapter einen Non bereit -Standard-Methode _Get_container() für den Zugriff auf den zugrunde liegenden Container. Diese Methode ist jedoch nicht Teil des offiziellen Standards und möglicherweise nicht in allen Implementierungen verfügbar.
Offizielle Dokumentation
Eine maßgebliche Dokumentation zur C-Standardbibliothek finden Sie unter finden Sie in der C-Standardbibliotheksreferenz unter https://www.cppreference.com/. Diese Website bietet umfassende Informationen zur Syntax, Semantik und Verwendung aller Standardbibliothekskomponenten.
Das obige ist der detaillierte Inhalt vonWie kann ich in STL-Containeradaptern wie Stack, Queue und Priority_queue auf den zugrunde liegenden Container zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!