vectorのすべての関数と使用上の注意事項


1、構造関数:
       (1)vector<> v;デフォルトコンストラクタ
(2)vector<>v 1(v)またはv 1=v;コピーコンストラクタ
       (3)vector<> v2(v.begin(),v.end());パラメータとして反復器を使用
       (4)vector<> v3(n);nでオブジェクトの個数を指摘する
       (5)vector<> v4(n,t);n個のオブジェクトを初期化し、各オブジェクトをtで初期化する
(6)vector<>v 5{}またはv 5={}初期化リストで初期化して、これはC++11標準で、VS 2010はできません
2、assign関数:(シーケンスコンテナのみ)
assign関数は既存のコンテナに再割り当てを行い、元のコンテナのsizeとcapacityを変更できます.コンストラクション関数は、同じコンテナタイプと同じ要素タイプでのみ初期化できますが、assignは、要素が暗黙的なタイプ変換できる限り、異なるコンテナタイプと要素タイプで初期化できます.assignの後、現在assignを呼び出しているコンテナの反復器が無効になります.
3、at関数:
at関数は、コンテナ内のiと下付きの要素にアクセスするために使用されます.この場合、境界を越えるとout-of-range異常が放出され、通常の下付きアクセス[]では異常が放出されず、実行時エラーが発生します.
4、back、front関数:
backはコンテナの最後の要素の参照を返し、frontはコンテナの最初の要素の参照を返します.注意この場合、容器が空でないことを保証します.
5、begin,cbegin,rbegin,end,cend,rend:
反復器を返します.cbeginはconst反復器を返し、rbeginは容器の最後の要素の反復器を返します.endではないことに注意してください.rendは最初の要素の前の反復器を返します.rbegin++は--endに相当します.その他類似.
6、capacity、reserve、size、resize:
capacity()は、現在のコンテナに空間を再開せずに最大どれだけの要素を格納できるかを示し、reserve()は、現在のコンテナにどれだけの要素を予約するかを示し、その変更はcapacityであり、reserve(n)が元のcapacityよりもnが大きい場合、空の間を再割り当てし、小さい場合は再割り当てせず、capacityも変更しない.
size()は現在のコンテナ内の要素の数を返し、resize(n,t)はsizeを変更し、nがsizeより大きい場合は残りの部分は要素tで埋め、小さい場合は余分な要素を直接削除し、resize()を呼び出してsizeを大きくするとcapacityが変化する可能性があります.要素を削除した後、元の反復器が削除した要素の個数の前に反復器が失効しない場合、反復器がn以降の要素を指す場合、反復器は失効します.n時間でresizeとcapacityは違います.
	vector v;
         v.reserve(20);
         v.assign(10,2);
         cout<

7、clear関数:
すべての要素を空にします.
8、data関数:
現在のコンテナの最初の要素ポインタを返します.このとき、シーケンスコンテナではポインタで直接操作できます.
9、emplace()およびemplace_back()関数、insert関数
emplace関数は反復器を作成する前に要素を挿入し、emplace_back()コンテナの最後に要素を挿入します.この関数とpush_back関数が異なりpush_back関数は、構築済みのオブジェクト、または一時オブジェクトのみを転送できます.コンテナには、このオブジェクトまたは一時オブジェクトのコピーバージョンが格納されています.そのため、コピーコンストラクション関数が呼び出されます.一時オブジェクトの場合、コンストラクション関数を呼び出して一時オブジェクトを作成し、コピーコンストラクション関数を使用して一時オブジェクトを構築するコピーバージョンがコンテナに格納されます.したがって、1回のコンストラクション関数、1回のコンストラクション関数(一時オブジェクトをコンストラクションするために使用される)、および1回のコピーコンストラクション関数が呼び出されます.一方,emplaceはパラメータリストを受け入れ,構築したオブジェクトを直接コンテナに入れることができる.emplaceが受信したパラメータもオブジェクトである場合、このオブジェクトのコピーバージョンとpush_back関数の場合と同じです.
         vectorv;
         v.reserve(100);
         v.assign(10,2);
         autoiter1=v.begin()+3;
         autoiter2=v.begin()+5;
         autoiter3=iter2+2;
         v.emplace(v.begin()+5,4);//v.insert(v.begin()+5,1,4);          ,  iter2 iter3  
         v.insert(v.begin()+5,4);
         cout<

emplace(iter,t)
および
insert(iter,t)
のみ
vector
容器の空間は十分で、反復器を変えることはできませんが、
insert(iter,n,t)
挿入要素とその後ろにある反復器が無効になります.また、
deque
ということは、最初と最後の位置に挿入する以外に、他の場所に挿入すると反復器が無効になります!!
同じemplace_backは、コンテナcapacityを変更せずにすべての反復器で有効です.
Dequeにはcapacity関数がありません.実際にはメモリが動的に割り当てられ、メモリが連続しているとは限らないので、このポインタ配列を維持します.
10、empty関数:
boolタイプを返し、コンテナが空であるかどうかを判断します.
11、erase関数:
反復器の位置を設定する要素を削除するか、2つの反復器によって設定された区間の要素を削除します.位置を削除する反復器とその後の反復器は両方とも無効になります.
12、max_size関数:
コンテナが収容できる最大オブジェクト数を返します.VS 2010では1073741823、すなわち2^30です.
13、push_backとpop_back関数:
       push_back()とpop_back()関数はend反復器を無効にします.すなわち、位置の挿入と削除の反復器が無効になります.
14、shrink_to_fit関数:
capacityをsizeサイズに縮小しますが、具体的なインプリメンテーションでは、このリクエストを無視すること、すなわちshrink_を呼び出すことを選択できます.to_fitもメモリ領域を一定に戻す保証はありません.
15、swap関数:
arrayに加えて、swapは任意の順序コンテナの要素をコピー、削除、または挿入する操作を行わないため、定数時間内に完了することを保証することができる.stringを除いて、コンテナを指す反復器、参照、およびポインタは、swap操作後に失効しないことが多い.それらは依然としてswap操作の前に指向された要素を指しているが、swapの後、これらの要素はすでに異なる容器に属している.string呼び出しswapの場合、反復器、参照、およびポインタが無効になります.
swapの2つのarrayは本当にそれらの要素を交換します.従って、2つのarrayを交換するのに要する時間はarray中の要素の数に比例する.
         
	vectorv;
         v.assign(10,2);
         autoiter1=v.begin()+3;
         vectorv2;
         v2.assign(10,3);
         autoiter2=v2.begin()+3;
         swap(v,v2);
         cout<