訪問STL容器適配器中的底層容器
訪問STL容器適配器中的底層容器,例如stack、queue和priority_queue,長期以來一直是人們好奇的話題。雖然可能沒有官方標準方法,但可以採用一種稱為「容器駭客」的巧妙技術。
容器駭客
這種方法涉及創建一個輔助類別從感興趣的容器適配器派生。這個衍生類別公開了一個靜態 Container() 方法,該方法傳回對底層容器的參考。
考慮以下程式碼片段:
<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>
這裡是 HackedQueue 結構,它繼承自priority_queue ,公開 Container() 方法。此方法授予對儲存優先權佇列中的元素的底層向量的存取權。
非標準方法
在Visual Studio 2008 中,某些容器適配器提供非標準方法
-標準_Get_container()方法來存取底層容器。不過,該方法並非官方標準的一部分,可能並非在所有實作中都可用。
官方文檔
有關 C 標準庫的權威文檔,請參閱參見 https://www.cppreference.com/ 上的 C 標準庫參考。該網站提供有關所有標準庫組件的語法、語義和用法的全面資訊。以上是如何存取 STL 容器適配器中的底層容器(例如堆疊、佇列和priority_queue)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!