首頁 > 後端開發 > C++ > 主體

如何存取 STL 容器適配器中的底層容器(例如堆疊、佇列和priority_queue)?

Patricia Arquette
發布: 2024-11-02 17:58:28
原創
457 人瀏覽過

How can I access the underlying container in STL container adaptors like stack, queue, and priority_queue?

訪問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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板