インタビューの質問のSTL標準ライブラリ(RPM)

まず、(記憶装置)の基本的なベクトルメカニズム
2、ベクトル自己成長機構
3は、基礎となる(保存)メカニズムリスト
第四に、どのような状況ベクトルの下で、どのような状況下にあるリストで
5、リストがソート原則として機能してい
VIを。メカニズムに基礎となる両端キュー
の7つの両端キューとベクトルの違い
8を、根底にあるメカニズムをマッピングし、複雑さを探して、側縁が挿入横切ることができる
、9をベクトルインサートとの違いは何リストを削除する
10は、アドレスを避けるためにどのようにハッシュテーブルが競合
11を、ハッシュテーブル、hash_set差hash_map
12、マップ間のhash_map差があり、ときにそれらの両方を使用するには?
サーティーン、赤黒木何自然?
フォーティーン、3つの問題は、マップとのセット
ベクトルのイテレータの挿入操作が失敗につながる可能性があり、なぜ5、
16、ハッシュテーブルとハッシュマップの違い
を達成するために17、STL基礎となるデータ構造
18を、6つのコンポーネントを提供STL?
十九、auto_ptrはそれのベクトル要素を行うことができますか?なぜ?
XX、next_permutationとパーティションの実現について簡単に?
XXIは、どのようなコンテナのトラバーサルの動作を許可していませんか?(イテレータを提供しないでください)

まず、基礎となるベクトル(記憶)メカニズム
  データに十分なスペースを保持する場合、ベクターは、連続したメモリ空間へのポインタを有するダイナミックアレイであり、別の部分は自動的に(より多くのスペースを適用する通常の電流容量を増加させます50%または100%)、次いで、元のデータの最後のコピーは、空間の元の部分は、その後、解放、内部に放出又はデータを削除すると、何のメモリ空間が解放されていない、空のデータの内部のみを。

第二に、ベクターの増殖機構ので
  データがロードされていないときにスペースが割り当てられた記憶領域の電流容量を倍増、割り当てられている場合、現在の値は、新しく割り当てられたメモリを解放元のメモリにコピーされます。
  任意のベクトル演算のために、宇宙の原因の再構成後に、元のベクトルのイテレータのすべてのポインティングの有効期限が切れているだろう。

三つは、(格納)根底にある機構リスト
  ノードの単位でデータを格納するために、ノードアドレスは、メモリに必ずしも連続していない各要素を挿入または削除、解放要素または空間に配置されています。

第四に、どのような状況ベクトルの下で、どのような状況下のリストと
  するとき、ランダムなベクトル記憶素子(すなわち、直接一つ一つを発見することなく、要素に対処式で計算することができます)が、データの非テール挿入や削除、非効率的、聴衆頻繁にオブジェクトの数は、単純な、小さな変化、ランダムアクセス。
リストには、オブジェクトの数が頻繁に変更されるラージオブジェクトのためのランダム・アクセス・メモリ、頻繁に挿入および削除をサポートしていません。

ファイブは、リストの並べ替え原理はソート機能が来る
  組み合わせた最初の2つの要素であること、および2つの要素が組み合わされた後、その後、その後、2つのサブは8、16を与えるために、要素のシーケンスの4つのサブは、プロセスが繰り返されるになっマージします,,,,シーケンス、結果のシーケンスがソートされます。
Oの時間複雑度(Nログ)

第六に、両端キュー機序
  の新しい連続空間を追加します。準備ができて、動的に組み合わせ区分的連続空間両端キューを、そして一緒にリンクするには、スペース予約機能を提供します。
注意:必要な場合を除き、我々は可能性として、ベクターではなく、両端キューを使用することを選択したベクトルのイテレータよりも両端キューイテレータはるかに複雑ので。Duqueのソートは、効率を向上させるために、両端キューのソートを複製するために最初のベクトルは、その後デックにコピー。
両端キューは、各要素が他のセクションより大きな連続空間(バッファ)へのポインタであることを特徴とする請求小さな連続空間であるマスタとして(STLコンテナをマッピングしない)マップを使用します。
:両端キューのイテレータは4つの内容を含んでいる
 。1)CUR:反復子が現在指している要素を

 2)最初:このイテレータと呼ばれる第一のバッファ。

 3)最後:バッファの末尾。

 4)ノード:指向性制御センター。

七、両端キューとベクトル差
1.vectorスペースが連続した線状一方向の開口部である、両端キュースペースは、連続的なスレッド双方向の開口部です。
2.dequeはスペース予約機能を提供していない、ベクターはスペース予約機能を提供する必要があります。
3.dequeは、ランダムアクセスイテレータを提供しますが、それは、ベクターイテレータよりもはるかに複雑です

八、根底にある機構をマップし、複雑さを探し、挿入側端部を通過できる
  赤黒木、平衡二分探索木。自動良い結果をソートします。
値だけを変更することができますが、実際には、イテレータマップでキーを変更することはできません。
  複雑さを探す:O(logN個)は
  、のようなベクトルをマッピングすることはできません、それは削除補間は最初のバックを通過することができない、コンテナ要素のイテレータの後に消去動作の後には戻りません。

九、ベクトルインサートとの差は何リストを削除
  ベクトルオブジェクトが大規模で複雑なコンストラクタに保存されている場合は、データのベクトル挿入や削除は、既存のデータを移動するためにコピーする必要があり、あまりにも多くのオーバーヘッドで、シンプルで小さなデータであれば、優れた効率リストに
リストデータを挿入、削除、既存のデータを横断する必要がありますが、あなたは、ヘッダーに高効率を、データを挿入します。

テンは、アドレスを避けるためにどのようにハッシュテーブルは、競合
1.リニアプローブを:スペースはすでに、それはこれまでの空き領域が見つかるまでダウン探し続け、その位置を占めている場合、ハッシュ関数は、要素の挿入位置を算出します。
2.二次検出:計算された位置が占有されている場合、それは順次H +、H + ^ 2 1を試している ^ 2 2 、等
3.開鎖:各テーブルには、リストの要素を保持し、実行リストに挿入され、削除

セブンイレブンは、ハッシュテーブル、hash_set、hash_map判別
  下へなどhash_setのハッシュテーブルは、何のソート機能を有していない、すぐに値が実際の値であることを見つけることができます。(並べ替え機能を有する、底部に赤黒木として設定)
  下のようにhash_mapハッシュテーブル、自動的な分類を迅速に見つけることができあり、各要素は、実際の値とキーを有します。(並べ替え機能を有する底部に赤黒木としてMAP)

XII差hash_mapとマップ、およびときにそれらの両方を使用するには?
コンストラクタ:hash_mapは、関数と関数マップ(サイズ以下)を比較するため、必要に等しい関数ハッシュ必要
としてボトム層と赤黒木に、基礎となるマップにhash_mapハッシュテーブル:ストレージ構造。
  一般的には、マップよりも速く検索速度をhash_map、だけでなく、関係なく、大きさと一定のレベルに属するデータの量の基本的な速度を見つけること。検索速度マップはlogN個のレベルです。しかし、それは必ずしもログよりも一定で小さくないですが、また時間のかかるハッシュ関数hash_map。
要素がhash_mapとある程度の大きさに達した場合は特に、効率を考慮した
マップを用いて、より少ないメモリ、または要素の数を考慮する

  選択マップまたはhash_mapは、キーが倍キーワードクエリ操作の数を見ている、とあなたは、全体の時間が時間クエリまたは単一のクエリであることを確認する必要があります。それが動作するようであれば、多くの時間が、平均処理時間が短い、hash_mapを使用し、その全体的な効率を必要とします。操作は数回である場合には、O(N)を使用して不確実性hash_mapを引き起こす可能性があり、その後、平均処理時間が比較的遅い、単一の治療時定数マップであり、考慮すべきことは前提とするので、全体的な効率の全体的な安定性よりも高くなければなりません操作の数は少なく。hash_map最悪の場合O(N)を生成する動作の小さい番号を使用して処理した場合、その後、このようにして台無し利点をhash_map。

サーティーン、赤黒木何自然?
1.各ノードは赤または黒である
2ブラックルート
ブラックリーフノードNULLノード3。
4.ノードがある場合、赤、黒とその子ノードがなければならない
任意の経路5 NULLの任意のノード、及びブラックに含まれるノードの数が同じでなければなりません

フォーティーン、3つの問題とマップ設定
1.なぜ、挿入や削除効率マップを他の配列よりも高く設定
  なしメモリコピーためと移動
2.なぜ、それぞれのインサートをマッピングし、設定した後、以前に保存されたイテレータは失敗しないのだろうか?
  反復子ノードへのポインタとして、ノードのメモリに変化が起こっていないと引き換えに、唯一のノードポインタ挿入動作は、メモリは、メモリへのポインタが増加しない、変化していません。
(ダオ10000 20000からの)ときのデータ要素を増加すると3、マップ、速度を設定するには、変更する方法を見つけるだろうか?
  赤黒木二分探索法、時間複雑性はlogN個であるのでlog100000から検索の数= 14 log20000 = 15、のみ複数回となります。

第五に、なぜベクトルイテレータの挿入操作が失敗につながる可能性があり
  、動的に、ベクトルのサイズを大きく元の空間に新しいスペースを追加していないが、新しい、より大きなスペースの別の構成では二回、元のサイズにして、内容をコピーするとき以上、元手術室の変化に起因するスペース、そのイテレータの故障のリリース。
理論は、理論的には、失敗の挿入、または消去、すべてのイテレータが再計算されます後は、彼らが期限切れのメモリを使用することができないことを、原則的に、失敗として見ることができます。
ただし、基礎となるベクターは締結、アレイの特徴の一般実施、慎重に検討の配列である
:インサートの1.Insert、位置は二つのケースに分けP、とすると
  P、A)コンテナの空き領域がある、メモリを再割り当てしません障害pの後、有効なイテレータの前に。
  B)重サブメモリを、Pイテレータが失敗した後に
有効になる前2.erase、位置消去は、P、Pイテレータ想定した場合、次の要素p位置で(もしテールP前に、次にP無効なテールエンドポイント)、イテレータPの後には無効です。

シックスティーン、間のハッシュテーブルとHashMapの違い
根本的にとしてハッシュマップのハッシュテーブル。次のような違いがあります
1.hashtable辞書は、クラスのサブクラスが実装ハッシュマップ地図インターフェースである
同期され2.hashtable方法、および方法は、HashMapを同期されていません

七、STL、基礎となるデータ構造の実装
1.vector:アレイ、高速ランダム・アクセス・サポート
2:リストは、二重リンクリスト、急速欠失サポート
3.dequeを中央コントローラとエンドツーエンドをサポートするために複数のバッファ(中間体ではない)高速欠失、ランダム・アクセス・サポート
4.stackを:基礎となる実装によって、リストまたは両端キュー、その理由は何も展開がベクトル取らないということである
消費することなく、その拡張ベクトルを根本的な理由によって実装両端キューまたはリストキューさ:5
PRIORITY_QUEUE:6のベクトルは、一般的に容器の底部であります処理ルールのヒープの管理は、基礎となるコンテナ実装
7:セットは、赤黒木は繰り返されない順序付き
8:多重集合赤黒木は、反復順序付け
9:地図を省略する、赤黒木を注文
10:赤黒木とmultimpapシーケンスを繰り返すことができる
11:hash_setハッシュテーブル障害は繰り返さない
12:hash_mapハッシュテーブル、障害は繰り返さない
ハッシュテーブル基礎構造ベクトル:13

十八、6つのコンポーネントが提供するSTL?
1.コンテナは、
  データ構造の品種である
  配列コンテナ:配列、ベクター、ヒープ、PRIORITY_QUEUE 、リスト、SLIST、両端キュー、スタック、キューに
  関連付けられたコンテナ:セット、マップ、マルチセット、マルチマップ 、ハッシュテーブル、hash_set、hash_map、hash_multiset、hash_multimap
2.アルゴリズムの
  共通の様々なアルゴリズム:ソート、検索、コピー、消去など、それは、並べ替え、next_permutationが勉強する価値がある、パーティション、マージソートなど
3.イテレータ
  コンテナとアルゴリズムとの間の遊び接着剤、いわゆる「パンポインタを入力します。」。オーバーロードされるクラスのテンプレート>、演算子++、operator-およびその他の関連する操作は、すべてのSTLコンテナをポインタとより専用のイテレータが付属しています- 5つのタイプは、実装の観点から、反復子は演算子*、オペレータの一種でありますが、 。唯一のコンテナの設計者は、イテレータを設計する方法を知って、プライマル・ポインタもイテレータです。これは、デザインモードです。
4.ファンクタの
  クラス行動機能、アルゴリズムは、実装の観点から、戦略として使用することができ、それは、クラスまたはクラステンプレートのファンクタオーバーロード演算子()です。関数ポインタは、一般的に狭いファンクタとみなすことができます。
アダプタの
  コンテナか何かファンクタあるいはIteratorインターフェイスを変更するためのA方式。たとえば、キューとスタックは、両端キューが皮膚の層をパック実際には、コンテナのように見えました。
6.コンフィギュレータ
  実装の観点から、空間の構成と管理をコピーし、コンフィギュレータは動的スペース割り当て、スペース管理、スペース解放classtemplateを達成することです。

十九、auto_ptrはそれのベクトル要素を行うことができますか?なぜ?
  することはできません。STL標準コンテナが含まれているので、所定の要素が構築されなければならず、割り当て転送することができるコピーすることができます。auto_ptrはない。しかし、shared_ptrの代わりにスマートポインタを使用することができます。

XX、next_permutationとパーティションの実現について簡単に?
1.next_permutation(次の順列)
  まず、第1の要素は、Iとなるように、2番目の要素はIであり、Iは、I <満たす、隣接する二つの要素を探して前方後端から開始位相のそのようなセットを発見隣人の後、そして私がJよりも大きい最初の要素を見つけ、テストの終わりから前方に始まり、i、jは逆になり、その後、要素II逆の順序、すなわち、要求「次」の順列のすべての後に。
2.partion:
  注文ヘッドエンド最初のイテレータが最後尾に移動され、イテレータの尾は最後の頭に移動します。値以上第一ピボット停止言及されるときの値が以下のピボットと呼ばれる最後に等しい場合、また停止し、その後2回の反復子がインターリーブかどうかをテストします。最初はまだ最後に残っている場合は、交換可能要素を取り付け、その後、(中心に接近する)各位置が調整され、その後、同じ動作を続けます。あなたは間違っていると呼ばれる2回の反復子を見つけたら、それは全体のシーケンスは、調整が完了しました表します。

XXIは、どのようなコンテナのトラバーサルの動作を許可していませんか?(NOイテレータ)
1.queueは、頭を除いて、両端キューにアクセスするための他の方法の他の要素は存在しません。
2.stack(両端キューを達成するためのボトム)、上面に加えて、スタックの他の要素にアクセスする方法はありません。
3.heap、すべての要素がトラバーサル機能を提供していない、特別注文ルールに従わなければなりません。

より転載 

おすすめ

転載: www.cnblogs.com/havain/p/11109167.html