[解決済み】STLのdequeって実際どうなの?
2022-04-07 03:16:09
質問
STLコンテナを見て、その実態(使用されるデータ構造)を把握しようとしたところ ディーク と思いました。最初は二重リンクリストだと思い、両端からの挿入・削除が一定時間でできるのではと思ったのですが、悩むのは 約束 演算子[]が一定時間で行われるようにすることです。リンクリストでは、任意のアクセスはO(n)になるはずですよね?
また、動的配列であれば、どのようにして 要素を追加する を一定時間で実行できますか?再割り当てが起こる可能性があること、O(1)は償却コストであることを述べておく必要があります。 ベクターのように .
では、一定の時間で任意のアクセスが可能で、同時に新しい大きな場所に移動する必要がないこの構造は何だろうと考えています。
どのように解決するのか?
dequeはやや再帰的に定義されており、内部的には、以下のようなダブルエンドのキューを維持します。 チャンク 固定サイズの 各チャンクはベクトルであり、チャンクの待ち行列(下の図では「マップ」)自体もベクトルである。
性能特性と比較した素晴らしい分析があります。
vector
にて。
コードプロジェクト
.
GCC標準ライブラリの実装では、内部で
T**
を使用してマップを表現します。各データブロックは
T*
これは、ある固定サイズで割り当てられる
__deque_buf_size
(に依存する)。
sizeof(T)
).
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】C++の余分な資格エラー
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較