Home > Backend Development > C++ > body text

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

Susan Sarandon
Release: 2024-11-03 12:42:02
Original
886 people have browsed it

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

Accessing Underlying Container of STL Container Adaptors

Container adaptors in the C Standard Template Library (STL), such as stack, queue, and priority_queue, provide a convenient interface on top of underlying containers like deque or vector. However, obtaining a reference to the underlying container, as needed for customized operations, can be challenging.

Is There a Standard Way?

No, there is no standard method to directly access the underlying container from these adaptors. The _Get_container() method mentioned is not part of the C standard and may vary depending on the implementation.

Common Workaround

One common workaround involves using template specialization, as follows:

<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>
Copy after login

By specializing this template for each specific adaptor type, we can access the underlying container. For example:

<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>
Copy after login

Custom Implementation for priority_queue

In the case of priority_queue, a similar approach can be implemented using a struct template:

<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>
Copy after login

Official Documentation

The official documentation for the C Standard Library can be found on the ISO/IEC website: https://www.iso.org/standard/74983.html

The above is the detailed content of How Can I Access the Underlying Container of an STL Container Adaptor?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template