STL 컨테이너 어댑터의 기본 컨테이너에 액세스
STL 라이브러리는 스택, 큐, 우선순위 큐와 같은 다양한 컨테이너 어댑터를 제공합니다. 이러한 어댑터는 기본 컨테이너와 상호 작용하기 위한 인터페이스를 제공하지만, 이 숨겨진 레이어에 액세스하는 표준화된 방법이 있습니까?
표준 액세스 방법의 부족
이라는 의문이 생깁니다. 불행하게도 STL은 스택, 큐 또는 Priority_queue의 기본 컨테이너를 검색하는 표준 방법을 정의하지 않습니다. VS2008과 같은 특정 구현에서 사용할 수 있는 _Get_container() 함수는 플랫폼별로 다르며 C 표준의 일부가 아닙니다.
기본 컨테이너 액세스
한 가지 해결 방법은 다음과 같습니다. 원하는 컨테이너 어댑터를 허용하는 사용자 정의 템플릿을 정의하고 템플릿 전문화를 사용하여 기본 컨테이너를 추출합니다. 예를 들어, 이 접근 방식은 스택 및 대기열 어댑터에 사용할 수 있습니다.
<code class="cpp">template<typename T> using Deque = std::deque<T>; template<typename T> using Stack = std::stack<T, Deque<T>>; template<typename T> std::ostream& operator<<(std::ostream& os, const Stack<T>& s) { // Output the contents of the underlying deque os << "["; for (const auto& elem : s.container()) { os << " " << elem; } os << " ]"; return os; }
우선순위 대기열 액세스
우선순위 대기열의 기본 컨테이너에 액세스하는 것이 더 까다롭습니다. 내부 구현에. 그러나 영리한 해결 방법은 개인 컨테이너 멤버에 대한 액세스 권한이 있는 중첩 하위 클래스를 정의하는 것입니다.
<code class="cpp">template <typename T, typename S, typename C> struct PriorityHack : private priority_queue<T, S, C> { using priority_queue<T, S, C>::c; }; template <typename T, typename S, typename C> S& container(priority_queue<T, S, C>& pq) { return PriorityHack<T, S, C>::c(pq); }</code>
이렇게 하면 다음을 사용하여 우선순위 대기열의 기본 컨테이너를 얻을 수 있습니다.
<code class="cpp">priority_queue<int> pq; vector<int>& tasks = container(pq); // Assign the underlying vector to tasks</code>
이 솔루션은 구현 플랫폼에 관계없이 스택, 대기열 및 Priority_queue 어댑터의 기본 컨테이너에 액세스하기 위한 표준화된 접근 방식을 제공합니다.
위 내용은 STL 컨테이너 어댑터의 기본 컨테이너에 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!