> 백엔드 개발 > C++ > STL 컨테이너 어댑터의 기본 컨테이너에 액세스할 수 있습니까?

STL 컨테이너 어댑터의 기본 컨테이너에 액세스할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-11-02 17:47:02
원래의
356명이 탐색했습니다.

Can You Access the Underlying Containers of STL Container Adaptors?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿