C ++の牛が質問3日目をはねのけます

1:マップとの違いを設定します。

そしてC ++をマップ関連コンテナに設定されている、基本的な実装は、黒木(RBツリー)です。マップとして各種操作オープンインターフェースを設定する、RB-ツリーも提供されるので、ほとんど全ての動作挙動のマップセットの、ちょうどRBツリーの動作挙動を転置。

マップとの違いを設定します。

(1)の要素であるキー値マップ(キー - 値):インデックスキーは、インデックス値は、データ表現に関連付けられている機能を、セットコントラストは、単にキーワードの集合である、SET各要素は一つだけのキーワードが含まれています。

(2)CONST反復子は、要素の値を変更することができないように設定、地図修正値を可能にするが、キーを変更しません。マップは、キーワードのランキングに基づいて設定されており、キーを変更することが許可されている場合、その秩序を確保するために、そしてあなたが最初のキーを削除する必要があり、その後、バランスを調整して、バランスを調整するために修正するキーを挿入するので理由はそうであり、真剣マップとセットの構造を弱体化させるために、イテレータの失敗をリードする、知っているが、変更後の場所に変更前の位置、またはポイントを指している必要がありません。したがって、反復子は、反復子の値を変更できない、STL配置CONSTを設定します;マップイテレータ値引数を変更することができ、キー値は変更しません。

(3)、添字オペレータのサポートをマッピング添字操作がサポートされていないセット。マップは、次に、マップにキーとmapped_type型デフォルト値の要素を有する挿入、キーが存在しない場合、検索を実行するための指標として添字演算子は、[]キーをマップする、添字を行うキー入力することができしたがって添字演算子[]は、地図アプリケーションで必要注意、const_mapができるだけでなく、特定の臨界値の存在を決定することが望ましいことは望ましくない要素が挿入されたときに使用すべきではない、mapped_typeタイプにはデフォルト値を使用しないべきではありませんています。あなたは、findで解決する必要性、可能な限りを見つけた場合。

2:STLのアロケータ

コンテナ内のメモリ管理の基礎となる詳細については、STLのSTLパッケージディスペンサー。次のようにメモリ構成およびリリースC ++では:

二段階で新しい演算子:(1)を呼び出す::オペレータ新しいコンフィギュレーションメモリは、(2)対象コンテンツオブジェクトのコンストラクタを呼び出すように構成されました

二段階で操作を削除します。(1)関数呼び出しのオブジェクト構成ギリシャ;(2)メモリ解放::演算子オフの従業員を削除

精密分割、操作領域の二つの別個の相にSTLアロケータの場合:メモリ配置ALLOC ::(割り当て)、メモリALLOC :: DEALLOCATE()を解放する責任を担っている、オブジェクトが(から::構築構成されて)、オブジェクトの破壊の原因であります()責任::破壊です。

一方、メモリ管理の効率を高めるアプリケーションメモリ小さなメモリ断片化の問題が生じ低減するために、SGIのSTLは、2段構成、より128Bよりも、第一段階は、空間コンフィギュレータを使用する空間の割り当てを使用し、空間のサイズ割り当てられたときに128Bよりも小さい、第二段階は、空間コンフィギュレータを使用します。第一段階は、第二段階は、フリー・リストを介してメモリを管理するために、コンフィギュレーション空間のメモリ・プールの技術を使用しながら、割り当てるための空間構成のmalloc()のrealloc()、free()を関数と空きメモリ空間として使用されます。

3:イテレータは要素の削除について

シーケンス容器ベクトル、両端キューの場合は、使用後の消去(itertor)は、イテレータの背後にある各要素は失敗しますが、各要素の後ろに前方に移動することになる1位、それは次の有効な消去イテレータを返します。各マップセットアソシアティブ容器2.、消去(イテレータ)、現在の反復子要素の故障の使用が、その構造は、赤黒木では、現在の要素を削除して、そのように、次の要素に反復子には影響しません次の要素に、消去レコードイテレータを呼び出す前に。リスト3.、それはメモリの割り当ての連続使用ではなく、正しい方法の上記二種類を使用することができるように、その消去方法は、また、次の有効なイテレータを返します。

4:いくつかの基本的なコンテナ実装STL

1.vector基礎となるデータ構造は、高速なランダムアクセスをサポートして配列です
 
2.list基礎となるデータ構造は二重に迅速に追加、削除をサポートしてリストをリンクされています
 
3.deque詳細はP146のSTLのソースコードの解析を参照するために、中央制御装置と複数のバッファへのデータ構造の基礎となる、(中間体ではない)の迅速な付加をエンドツーエンドをサポートする、ランダムアクセスをサポート
両端キューは、それがスタックフォームの内容に格納されて両端キューが(両端キュー)として格納されています。
[リアクトル1] - > [リアクター2] - > [反応器3] - >···
いくつかの要素に各スタック、スタックとそこまでの間、スタックポインタを保存し、ベクトルおよびリスト項目をバインドするために表示されます。
 
いかなるベクターは容量サイズ制限されるべきではないので4.stack一般リストで実装両端キューまたは底部は、ヘッドを閉じることができ、拡張が処理します
 
いかなるベクターは容量サイズ制限されるべきではないので5.queueの両端キュー又は一般リストで実装底部は、ヘッドを閉じることができ、拡張が処理します
 
(コンテナが、その後パッケージされているので、スタックとキューアダプタ事実は、コンテナと呼ばれていません)
 
6.priority_queueデータ構造の基礎となることは一般的に、基礎となるコンテナの実装を管理する規則を処理する容器ベクトルの底、ヒープスタックであります
 
根本的な赤黒ツリーデータ構造を7.set、注文、繰り返されることはありません
 
8.multiset根底にある赤黒ツリーデータ構造、再現性、注文しました 
 
注文9.map基礎となる赤黒ツリーデータ構造は、繰り返されることはありません
 
10.multimap根底にある赤黒ツリーデータ構造、注文し、繰り返し可能
 
11.hash_set基礎となるデータ構造は、ハッシュテーブル、障害は、繰り返されることはありませんです
 
12.hash_multiset基礎となるデータ構造は、ハッシュ表、障害である、繰り返すことができます 
 
13.hash_map基礎となるデータ構造は、ハッシュテーブル、障害は、繰り返されることはありませんです
 
14.hash_multimap基礎となるデータ構造は、ハッシュ表、障害である、繰り返すことができます 

5:STLの基本的なコンポーネント

容器(コンテナ)、アルゴリズム(アルゴリズム)、反復子(イテレータ)、容器アダプタ(容器アダプタ)、関数オブジェクト(ファンクタ)、他の標準的なSTLの成分に加えて:STLは、3つのコア・コンポーネントを有します。人気の話:

コンテナ:何か海の塩水を入れ、水で満たされたカップを、物事を保持するために、教室で...... STLコンテナは人を収容することができますが、いくつかのデータのテンプレートクラスです。

アルゴリズム:カップに注入され、海に汚水が、教室内から人を追い出す...... STLアルゴリズムは、データ操作の容器法内部で処理されます。

反復子:カップケトル、下水管、スラスト人々に注ぐというプロパティマネージャ...... STLイテレータ:オブジェクトコンテナ内のデータを横断します。データが処理された容器内に格納されている場合、反復子は別の部材に一方の部材から移動します。彼は、コンテナの一部のメンバーの間で事前に定義された順序に従って移動することができます。通常の一次元アレイ、ベクトル、及び両端キューリスト、反復子はポインタです。

私たちは専門家が言った方法を見てみましょう:

容器(コンテナ):コンテナは、メモリ内のデータ編成の方法であって、例えば、配列、スタック、キュー、リンクリスト、またはバイナリ(STLが、これらは、標準的なコンテナではありません)。容器内のSTLデータ構造タイプT(テンプレート)を記憶値の有限集合、容器の内部は、一般的に達成されるクラスです。データ型はクラスその後、Tによって表される場合、これらの値は、オブジェクト自体であってもよいです。

アルゴリズム(アルゴリズム):アルゴリズムは、挙動または機能の処理内容に様々な方法で容器に塗布されます。例えば、コンテナの内容物、コピー、マージおよび検索アルゴリズムをソートします。STLでは、アルゴリズムの性能は、テンプレート関数です。これらの機能は、血管機能のクラスのメンバーではありません。代わりに、彼らは独立した機能です。アルゴリズムの一つの驚くべき特徴は、とても汎用性があります。STLではなく、従来のC ++の配列、または任意の他のアプリケーション指定されたコンテナは、コンテナのために使用することができます。

イテレータ(反復子):データの種類と動作(アルゴリズム)のコンテナを選択すると、その後、彼がするために残された唯一のものは、イテレータとの相互作用をすることです。デバイスの世代は、容器内の共通の要素へのポインタとみなすことができます。増分は、ポインタが後続のコンテナ要素のそれぞれにポイントを作る反復子をインクリメントしてもよいです。反復子はそれと一緒にコンテナとしてSTLアルゴリズムの重要な部分です。
6つのなぜ使用イテレータの代わりに、ポインタ

1、イテレータ

また、オブジェクト表現の内部を露出させることなく、各要素高分子オブジェクトのシーケンシャルアクセス方式を提供するために、カーソル(カーソル)モードとして知られているイテレータ(反復)モード。またはより容易に理解することができると言う:イテレータモードはパターン集合体オブジェクトで使用され、このモードを使用することによって、私たちは内部オブジェクトなしで知ることができる(方法イテレータによって提供される)特定の順序重合アクセスで表し各要素オブジェクト。

集合オブジェクトが結合され、ある程度、その広範な使用を制限し、一般的にのみこのようなSTLリスト、ベクトル、スタック及び他の容器のような重合型等ostream_iterator拡張イテレータの底部を支持するために使用される:上記特性イテレータモードに起因します。

図2に示すように、ポインタとイテレータとの間の差

イテレータはポインタのような演技、ポインタ、クラステンプレートではありません。>、*、+、 - - など彼はただ、いくつかの演算子ポインタをオーバーロードすることにより、関数ポインタのいくつかを模倣します。反復子は、ポインタは「血管を通過できるSTLの要素の全部又は一部(標準テンプレートライブラリ)」オブジェクトでカプセル化し、本質的にポインタよりも設けられ、元のポインタ、ランプアップポインタ概念(リフト)をカプセル化およびその他の操作 - シニア行動、インテリジェントポインタの同等のは、彼がデータ構造の異なる種類に応じて異なる++達成することができます。

反復子は、オブジェクト参照値がオブジェクトではない返すので、出力イテレータCOUTのみ*値自体を直接出力することができない値を使用することができます。

3、イテレータを引き起こし

抄録アクセスロジックの異なるコレクションにアクセスするためのイテレータクラスの方法は、そのような構造は、コレクションをループの効果を達成するために、内部のセットが公開されていません。

7:差のSTLはリサイズするとreserse

 

1.capacity

 

   それは保存することができる新たな記憶スペースの割当ての前に容器内の要素の総数を指します。

 

2.サイズ

 

   これは、現在コンテナに格納された要素の数を指し

 

 

 

後にこれら二つの概念を明確に、予備の違いを理解してサイズを変更するのは簡単です

 

 

 

1).reserveは、コンテナの予備スペースを表しますが、実際にはオブジェクトを作成できません、あなたは挿入によってそのように()または一back()とのオブジェクトを作成する必要があります。

 

割り当てられたスペースの両方のサイズを変更するだけでなく、オブジェクトを作成します。

 

 

 

2).reserve容量は、サイズ変更は、両方の容量の大きさを変更し、サイズがサイズを変更しない、サイズを変更し、サイズがサイズを変更します。

8:構造体とクラスの違い

C ++では、継承することができ、構造体やクラスの定義クラスを使用することができます。デフォルトのアクセス許可とパブリックで、デフォルトとデフォルトのアクセス許可の継承のクラスがプライベートである、構造、デフォルトのアクセス権を継承:違いがあります。

さらに、テンプレートクラスは、<、クラスT iが整数>このようなテンプレートとして、クラス・パラメータを定義することができます。

9クラスは参照型で定義されていますが、最初のリストで初期化する必要がありますすることができます

一般的なデータ型のサイズ10

 

 11 C ++のintタイプのいくつかの進リテラル

 

 残り::::::::  少し注意が機能を取得します。

キーボードからの文字入力後、読み出し動作を終了するEnterキーは「\ 0」として格納されます。最後に、具体的には、これらの点に注意を払う。「\ 0」を配置する文字定数隠れ場所があるでしょう。

strcatのこの機能は、ステッチの初めに最初の「\ 0」からの方法です。strlenの長さは、カウント「\ 0」に含まれていません。

バイトアライメントは非常に重要な知識です。これらは、一般的に、ポインタの長さに並んでいます。

0x20150810
上位アドレスから下位アドレスへ:20150810ストレージがビッグエンディアンモードに応じた場合
                                  上位アドレスに低いから出力:20150810
リトルエンディアンモードに応じて記憶されている場合は、次の上位アドレスに低:10081520 
                                  上位から下位アドレスへの出力:08102015
 
簡単なレジスタ変数:変数を繰り返し読み書きを必要とする場合、変数CPUレジスタに格納されて繰り返しアクセス・メモリを必要とせず、あなたがそれを直接使用することができ、かつ、キーワードを登録する提案型です変数が一定の条件を満たし、レジスタ変数の使用を放棄していないため、コンパイラであってもよいです。一般的には、自動的にローカル変数とは、関数のパラメータとして変数を登録します。
所以当定义一个静态变量为寄存器变量,编译器不会通过,它仍然还是静态变量。简单局部变量,不说明都是auto的。
TCP连接不能自动检测断连的现象;
TCP中KEEPALIVE机制是默认不打开的,需要通过setsockopt将SOL_SOCKET.SO_KEEPALIVE设置为1则是打开,打开后会定时向连接对方发送ACK包(linux下默认是7200s 即2小时发生一次发送一次握手信息),如果在发送ACK包后对方不回应才能检测道对方的断开信息
Heartbeat机制是客户端每个一段时间向服务器发送数据包,来通知服务端该客户端保持连接
 
Quest Clear!!!!

 

 

おすすめ

転載: www.cnblogs.com/Tonarinototoro/p/11469689.html