訪問STL容器適配器的底層容器
標準模板庫(STL)提供了stack、queue和priority_queue等容器適配器,它提供容器適配器了一個方便的接口,同時在底層容器上提供了一個抽象層。然而,這些適配器中缺乏訪問底層容器的標準化方法。
目前實作
在STL 的某些實作中,例如Microsoft 的Visual Studio 2008 中,有一個名為_Get_container() 的非標準方法可用於堆疊和佇列。然而,priority_queue 不存在這樣的方法。
存取priority_queue 中的底層容器
儘管缺乏標準方法,但已經設計了一種解決方法:
<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>
此程式碼定義了一個輔助函數Container(),它利用巢狀的私有類別HackedQueue 來存取底層容器c。
用法
使用此解決方法,您可以如下存取priority_queue的底層容器:
<code class="cpp">priority_queue<SomeClass> pq; vector<SomeClass>& tasks = Container(pq);</code>
官方文件
STL的官方文件可以在以下連結找到:結論
雖然沒有標準方法來存取STL容器適配器的底層容器,但提供的解決方法專門為priority_queue提供了解決方案。對於堆疊和佇列,如果可用,可以使用非標準 _Get_container() 方法。以上是如何存取 STLpriority_queue 的底層容器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!