ベクター
データ構造:
三つのデータメンバー:
反復子開始; //ヘッドポインティングベクトル空間は、現在使用され、即ちvector.begin()
イテレータ仕上げ; //エンドポイントのベクトル空間は、現在使用され、すなわちvector.end()
イテレータend_of_storage; //現在利用可能なエンドポイントのベクトル空間
重要な機能:
開始():リターンがスタート。
エンド():リターン・フィニッシュ。
サイズ():戻りsize_type(最後は() - 開始()); // size_type类似于VALUE_TYPE
容量():戻りend_of_storageスタート。
リサイズ():
最初のサイズは、要素はnew_size後)(より少ない消去されている場合、新しいサイズは、元のサイズよりも小さいか否かを判定する
そうでなければ、最後には欠けている要素を満たした(後)
ボイドサイズ変更(size_typeのnew_size、CONST T&X) { IF(new_size <サイズ()) 、消去((開始)+ new_size、エンド())。 そうでなければ (端()、new_sizeサイズ()、X)を挿入します。 }
クリア():消去((開始)、エンド()); //デストラクタのみ、スペースが解除されていません
一back():
最初の利用可能な場合仕上がりで構成次に、スペースが利用可能であるか否かを判定し、変速を終了します。
そうでない場合、コールは)(具体的な説明のinsert_aux以下、移動insert_aux。
ボイド一back(CONST T&X) { (仕上げ= end_of_storage!)なら、{ (X、フィニッシュ)を構築します。 ++仕上げ; } 他 insert_aux(エンド()、x)は、 }
insert_aux()
コードP122ページ
特定のプロセス:
まず、仕上げは後退しながら電流容量(仕上がり!= End_of_storage)、容量がある場合、[位置、仕上げ)全体のシフト要素は、元の位置に新しい要素を挿入するか否かが判定されています。
何容量が存在しない場合、新たなスペースが最初の(元の2倍)を計算し、新しい次元のサイズに対応します。
スペースと空きスペースが完了した後にデストラクタソース要素をコピーし、新しい領域にコピーされ、元の開いた要素の終了後、3つのイテレータスタート、フィニッシュとend_of_storageを再調整
pop_back()
ちょうど前方pop_back()とデストラクタ、元の仕上げバック()要素は、スペースを解放しません
ボイドpop_back() { --finish。 Destoryは(仕上げ)。 }
消去()
最初の要素を[最初、最後)、最初のコピー[最後の仕上げ)の一部を削除して、その後の要素をカバーした後、エリアをクリアするには、それは、i)は、[仕上げです
仕上げは、カバーの端位置に移動させ、要素が新しい挿入位置を返します
イテレータ消去(第イテレータ、反復子最後) { 反復子I =コピー(最後、仕上げ、最初の); (I、仕上げ)を破壊。 仕上げ= finish-(最後の最初)。 最初に返します。 }
インサート()
P125ブック
添加元素の数に比べて等しいかそれ以上、挿入することができる場合、予備空間は、まず、決定されます。
この場合には:
挿入ポイントは、次に、要素の新しい数の要素数よりも大きい場合、まず、要素の数は、挿入ポイントの後に決定されます。
その位置は非常に仕上げ(合計n個の要素に要素の最初の[仕上げ-N、仕上げ))、更新完了old_finish及び(CO Mn元素)の後の要素の、次に[位置、old_finish-N)、後〜M元素のold_finish合計は、完成移動し、スペースが空いたn個の要素。新しい要素を覆うまだ[位置、位置+ N)です。
その後、新しい要素の数よりも少ないです。
最初に生成要素が終了後およびNM、NMの合計上の位置に挿入されます。
スペースがm個の要素を空いたように、その後の位置〜old_finish m個の要素は、新しい末尾に移動されました。
インサート要素postition〜old_finish、Mの合計、N-M + M =書き換えN、挿入が完了する。
容量が不足している場合:
展開が正確にold_sizeの+ Nを保持フィットする必要があります場合は、二回//新しい長さや拡張をインストールすることができます。LEN = old_sizeの+ MAX(old_sizeの、N):最初のスペースを決めます
次に、新しい要素のためのスペースを割り当てます
そしてコピーし、新しい領域への挿入ポイントの前に元の要素、その後は、n個の要素の挿入、新しい領域への挿入ポイントの後、元のコピーの要素を埋めます。
そして、デストラクタ要素元領域と空き領域。
最後に、新しい空間に3つのイテレータの位置を調整