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

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

Susan Sarandon
リリース: 2024-11-03 12:42:02
オリジナル
941 人が閲覧しました

How Can I Access the Underlying Container of an STL Container Adaptor?

STL コンテナ アダプタの基になるコンテナへのアクセス

C 標準テンプレート ライブラリ (STL) 内のコンテナ アダプタ (スタック、キュー、 priority_queue は、deque や Vector などの基礎となるコンテナーの上に便利なインターフェイスを提供します。ただし、カスタマイズされた操作に必要な、基になるコンテナへの参照を取得するのは難しい場合があります。

標準的な方法はありますか?

いいえ、標準はありません。これらのアダプターから基礎となるコンテナーに直接アクセスするメソッド。前述の _Get_container() メソッドは C 標準の一部ではなく、実装によって異なる場合があります。

一般的な回避策

一般的な回避策の 1 つは、テンプレートの特殊化を使用することです。

<code class="cpp">template <class Type>
struct ContainerAdapter {
  static Type& container(const Type& adapter) {
    return adapter; // Assumes underlying container is of the same type
  }
};</code>
ログイン後にコピー

このテンプレートを特定のアダプター タイプごとに特化することにより、基礎となるコンテナーにアクセスできます。例:

<code class="cpp">template <>
struct ContainerAdapter<std::stack<int>> {
  static std::deque<int>& container(const std::stack<int>& stack) {
    return stack.*&stack::_deque; // Internal implementation hack
  }
};</code>
ログイン後にコピー

priority_queue のカスタム実装

priority_queue の場合、構造体テンプレートを使用して同様のアプローチを実装できます:

<code class="cpp">template <class T, class S, class C>
struct PriorityQueueAdapter {
  static S& container(priority_queue<T, S, C>& pq) {
    // Use a type trick to access private member
    struct Inner : private priority_queue<T, S, C> {
      static S& container(priority_queue<T, S, C>& pq) {
        return pq.*&Inner::c;
      }
    };
    return Inner::container(pq);
  }
};</code>
ログイン後にコピー

公式ドキュメント

C 標準ライブラリの公式ドキュメントは、ISO/IEC Web サイト: https://www.iso.org/standard/74983 にあります。 html

以上がSTL コンテナ アダプタの基礎となるコンテナにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート