访问 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中文网其他相关文章!