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>
ここでは、priority_queue から継承する HackedQueue 構造体を示します。 、Container() メソッドを公開します。このメソッドは、優先キューに要素を格納する基になるベクターへのアクセスを許可します。
非標準のアプローチ
Visual Studio 2008 では、特定のコンテナ アダプタが非標準のアプローチを提供します。 - 基になるコンテナにアクセスする標準の _Get_container() メソッド。ただし、このメソッドは公式標準の一部ではなく、すべての実装で利用できるわけではありません。
公式ドキュメント
C 標準ライブラリに関する正式なドキュメントについては、次を参照してください。 C 標準ライブラリ リファレンス (https://www.cppreference.com/) を参照してください。この Web サイトは、すべての標準ライブラリ コンポーネントの構文、セマンティクス、および使用法に関する包括的な情報を提供します。
以上がSTL コンテナ アダプタ (stack、queue、priority_queue など) の基礎となるコンテナにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。