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