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

如何存取STL容器適配器的底層容器?

Susan Sarandon
發布: 2024-11-03 12:42:02
原創
885 人瀏覽過

How Can I Access the Underlying Container of an STL Container Adaptor?

存取STL 容器適配器的底層容器

C 標準範本庫(STL) 中的容器適配器,例如堆疊、佇列和priority_queue,在雙端佇列或向量等底層容器之上提供方便的介面。然而,根據定制操作的需要獲取對底層容器的引用可能具有挑戰性。

有標準方法嗎?

沒有,沒有標準方法從這些適配器直接存取底層容器。提到的 _Get_container() 方法不是 C 標準的一部分,可能會因實作而異。

常見解決方法

一個常見的解決方法是使用模板專門化,如下所示:

<code class="cpp">template <class Type>
struct ContainerAdapter {
  static Type& container(const Type& adapter) {
    return adapter; // Assumes underlying container is of the same type
  }
};</code>
登入後複製

透過針對每個特定適配器類型專門化此模板,我們可以存取底層容器。例如:

<code class="cpp">template <>
struct ContainerAdapter<std::stack<int>> {
  static std::deque<int>& container(const std::stack<int>& stack) {
    return stack.*&stack::_deque; // Internal implementation hack
  }
};</code>
登入後複製

priority_queue 的自訂實作

對於priority_queue,可以使用結構模板實作類似的方法:

<code class="cpp">template <class T, class S, class C>
struct PriorityQueueAdapter {
  static S& container(priority_queue<T, S, C>& pq) {
    // Use a type trick to access private member
    struct Inner : private priority_queue<T, S, C> {
      static S& container(priority_queue<T, S, C>& pq) {
        return pq.*&Inner::c;
      }
    };
    return Inner::container(pq);
  }
};</code>
登入後複製

官方文件

C標準庫的官方文件可以在 ISO/IEC 網站上找到:https://www.iso.org/standard/74983。 html

以上是如何存取STL容器適配器的底層容器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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