STL コンテナ アダプタの基礎となるコンテナにアクセスする
STL ライブラリは、スタック、キュー、優先キューなどのさまざまなコンテナ アダプタを提供します。これらのアダプターは、基礎となるコンテナーと対話するためのインターフェースを提供しますが、次のような疑問が生じます: この隠れ層にアクセスする標準化された方法はありますか?
標準アクセス方法の欠如
残念ながら、STL では、スタック、キュー、または priority_queue のネイティブ コンテナを取得するための標準メソッドが定義されていません。 VS2008 などの特定の実装で使用できる _Get_container() 関数はプラットフォーム固有であり、C 標準の一部ではありません。
基盤となるコンテナへのアクセス
回避策の 1 つは、次のとおりです。必要なコンテナ アダプタを受け入れ、テンプレートの特殊化を使用して基礎となるコンテナを抽出するカスタム テンプレートを定義します。たとえば、このアプローチはスタック アダプタとキュー アダプタに使用できます。
<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 中国語 Web サイトの他の関連記事を参照してください。