C ++ベクトル上のご注意

1.初期化

       C ++のような11の中括弧{}に初期化され、その差を(注意する)後に添加。

         std ::ベクトル<整数> vecTest1(5); //それぞれが0である、5つの要素を初期化します

         std ::ベクトル<整数> vecTest2 {5}; //要素の値が5で初期化します

    

 

一back:2.要素を追加します。

       ベクターに新しい要素を追加することによって、一back、ベクトルメモリは時々、変化、サイズ及び容量サイズに応じて、もちろん、これらのシステムは処理され、基準は、STLソース作ることができます

        サイズ<容量は直接最後に追加すると、変更されません。

        サイズ==メモリの別の部分のために再適用し、過去をコピーする能力が末尾に追加する場合、この時間は変更があるでしょう。

        STLコンテナのメンバーを持っています:

                 開始位置//)(始まります 

                 エンド()//終了位置 

                 サイズ()//現在のサイズ 

         アプリケーションのメモリサイズすなわち容量()//現在の容量、

     ベクターは、連続したメモリ空間であり、メモリ位置は、三、開始、終了、仕上がり、サイズ=エンド開始、容量=仕上げスタートを同定しました

     ベクターを使用する場合、あなたはサイズ=容量を参照してください多くの時間が、この時間は直接、最後に要素を追加し、メモリは明らかに十分ではありません、その後、別の場所に十分な大きさを再割り当て

     時にはサイズ<容量があり、今回は直接の末尾に追加しました。

std :: coutの<< "vecNumはバックのinit押して" <<はstd ::てendl; 
ベクター<整数> vecNum(5)。
std :: coutの<< "vecNum ADDR:" <<&vecNum <<はstd ::てendl; 
(; iは10 <I ++が自動I = 5)のための
{ 
	vecNum.push_back(私は10 *)。
	std :: coutの<< "vecNum一back(" << I << ")=" <<私は10 <<はstd :: ENDLを*; 

	std :: COUT << "vecNum.size()=" << vecNum.size()<< "vecNum.capacity()=" << vecNum.capacity()<<はstd :: ENDL。
	std :: coutの<< "vecNum.begin()ADDR:" <<&(* vecNum.begin())<<はstd ::てendl; 
} 
のstd :: coutの<< "vecNum ADDR:" <<&vecNum <<はstd ::てendl;

  

       

earseと削除に関して3

     返します削除された要素の現在の位置についてのイテレータを消去し、それが++演算子を横断するとき、他のリストは、ほとんどマッピングことに注意することが重要です、

    earseメモリが本当に空になっていない後、だけで変更されていない容量の大きさの本当の能力の内容を削除することに注意してください、スワップによって実装される必要があるの容量を削減

     すべてクリア考えられる:ベクトル<整数>()スワップ(vecNum);.

オートitor = vecNum.begin()。
(;!itor = vecNum.end();)
{ 
    自動NUM = * itor。
    もし(NUM == 60 
    { 
        itor = vecNum.erase(itor)。
        破ります; 
    } 
    
    { 
        itor ++ 
    } 
}

  "ERASE要素60後:" :: COUT << STD STD :: <<てendl;
  printVector(vecNum);
  ベクトル<整数>(VECNUM).swap(VECNUM) ; //クリア空洞VECNUMメモリ
  printVector(vecNum) ;

     

 

      //だけの要素が前方に移動し、削除する必要によって前進させるイテレータへのポインタを削除するので、彼らはすべての終わりに除去する必要がある削除

      //を削除する新しい要素の末尾を指すイテレータを返します。

      だから、earseでまだearse使う直接提案を通過するので、一般的にあなたが本当に削除したい、使用する必要があります

オートitor = remove_if(vecNum.begin()、vecNum.end()、[](INT X) - > BOOL { リターンのx == 20 ;});
// または
 // オートitor =取り除く(vecNum.begin()、vecNum.end()、20)。
        
// 通过删除消去 
vecNum.eraseを(itor、vecNum.end());


ベクトルに関しては4. <ブール> - 注意

       出典:  https://blog.csdn.net/DoronLee/article/details/78462208

       ベクトル<ブール>はSTLコンテナではなく、STLコンテナではなく、STLコンテナではありません!

       まず、ベクトル<ブール>通常の意味でのベクトルコンテナではありません、これは歴史問題に由来しています。 

初期のC ++ 98で場合は、ベクトル<ブール>このタイプがありますが、それは考慮に入れ、省スペースのアイデアを取ることだったので、バイト内のベクトル<ブール>はビットがビットである、バイトストアではありませんので、保存されました!

C ++が動作するビットに直接移動しないので、

    したがって、オペレータ[]と 通常の容器は、対応する要素への参照を返す必要があり、

   オブジェクト「のstd ::ベクトル<ブール>参照」タイプ:しかし、ベクトル<ブール>実際にそれを訪問するためには、「プロキシリファレンス」ではなく「真の参照」、リターンです。

   自動自動型推論を使用している場合ので、問題があるでしょう

//ベクトル<ブール>慎用
ベクトル<ブール> vecBool = {FALSE、TRUE、FALSE}。
BOOL TEST1 = vecBool [0]。
オートTEST2 = vecBool [1]。

=真TEST1に; // 実際に暗黙的型変換暗示さTEST1初期
falseに= TEST2を; //は、それが一度に<ブール>場合、ベクトルBOOL型が、内部クラスではないTEST2 TEST2修正値は、値が変性vecBool続く
、自動インデックス= 0
:(vecBool自動I)のために
{
    COUT << "vecBool [" << <<インデックス"]" STD :: << ENDL << Iを;
    インデックス++;
}

     

おすすめ

転載: www.cnblogs.com/leehm/p/10929756.html