ホームページ  >  記事  >  バックエンド開発  >  STL コンテナ アダプタ (stack、queue、priority_queue など) の基礎となるコンテナにアクセスするにはどうすればよいですか?

STL コンテナ アダプタ (stack、queue、priority_queue など) の基礎となるコンテナにアクセスするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 17:58:28458ブラウズ

How can I access the underlying container in STL container adaptors like stack, queue, and priority_queue?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。