STL コンテナ アダプタの基礎となるコンテナにアクセスできますか?

Barbara Streisand
リリース: 2024-11-02 17:47:02
オリジナル
335 人が閲覧しました

Can You Access the Underlying Containers of STL Container Adaptors?

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

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