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