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; }
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>
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>
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!