C++Vectorの基本的な使い方の紹介


学習C++->ベクトル(vector)
一、ベクトルの紹介ベクトルvectorはオブジェクトエンティティであり、他の多くのタイプの同じ要素を収容することができるため、コンテナとも呼ばれる.stringと同様にvectorはSTL(Standard Template Library,標準テンプレートライブラリ)のカスタムデータ型であり,一般に配列の拡張版と考えられる.
使用する場合は、ヘッダファイルvector,#includeを含める必要があります.
vectorコンテナは配列と比較して、必要に応じていつでも自分のサイズを自動的に調整して、入れる要素を収容できるという利点があります.さらにvectorは、自身を操作するための多くの方法を提供しています.
二、ベクトルの宣言及びvector型変数の初期化の宣言及び初期化の形式も多く、よく使われるのは以下のいくつかの形式である.
        vector<int> a ;                                //    int   a
        vector<int> a(10) ;                            //         10   
        vector<int> a(10, 1) ;                         //         10      1   
        vector<int> b(a) ;                             //      a     b
        vector<int> b(a.begin(), a.begin()+3) ;        // a     0   2 ( 3 )    b    

また、配列を直接使用してベクトルを初期化することもできます.
        int n[] = {1, 2, 3, 4, 5} ;
        vector<int> a(n, n+5) ;              //   n  5       a   
        vector<int> a(&n[1], &n[4]) ;        // n[1] - n[4]          a   
 

三、要素の入力とアクセス要素の入力とアクセスは操作の普通の配列のようにcin>>で入力することができて、cout<例:
    #include
    #include

    using namespace std ;

    int main()
    {
        vector<int> a(10, 0) ;      //   10   0   a

        //           
        cin >>a[2] ;
        cin >>a[5] ;
        cin >>a[6] ;

        //    
        int i ;
        for(i=0; i<a.size(); i++)
            cout<<a[i]<<" " ;

        return 0 ;
    }

要素の出力には、遍歴器(反復器とも呼ばれる)を使用して出力制御を行うこともできます.vectorb(a.begin()、a.begin()+3);この宣言形式では、(a.begin()、a.begin()+3)は、ベクトル開始要素位置から開始要素+3までの要素位置を表す.(a.begin()、a.end()は、開始要素と最後の要素以外の要素の位置を表します.ベクトル要素の位置は遍歴器となり、ベクトル要素の位置もデータ型であり、ベクトル内の遍歴器のタイプはvector::iteratorである.遍歴器は要素の位置だけでなく、容器の中で前後に移動することもできます.
上記の例では、要素のすべての出力部分のコードを次のように書き換えることができます.
 //    
    vector<int>::iterator t ;
    for(t=a.begin(); t!=a.end(); t++)
        cout<<*t<<" " ;

*tはポインタの間接アクセス形式であり、tが指す要素値にアクセスすることを意味する.
四、ベクトルの基本操作
  1>. a.size()                 //          


    2>. a.empty()                //        


    3>. a.clear()                //        


    4>.   
        a = b ;            // b     a   


    5>.   
           ==!=>>=<<=       ;
         : a == b ;    //a   b    ,      1


    6>.    - insert
        ①、 a.insert(a.begin(), 1000);            // 1000     a      
        
        ②、 a.insert(a.begin(), 3, 1000) ;        // 1000            0-2 ( 3   )
        
        ③、 vector<int> a(5, 1) ;
            vector<int> b(10) ;
            b.insert(b.begin(), a.begin(), a.end()) ;        // a.begin(), a.end()          b.begin() 


    7>.    - erase
        ①、 b.erase(b.begin()) ;                     //          
        ②、 b.erase(b.begin(), b.begin()+3) ;        // (b.begin(), b.begin()+3)       


    8>.    - swap
        b.swap(a) ;            //a   b      

五、二次元ベクトルは配列と同じで、ベクトルは次元数を増やすこともでき、例えばm*nサイズの二次元ベクトルを宣言する方法は以下のようにすることができる.
   vector< vector<int> > b(10, vector<int>(5));        //    10*5 int     

ここで、実際に作成されるのは、ベクトル内の要素がベクトルであるベクトルです.2 Dベクトルは、1 Dベクトルの相関特性に基づいて操作することもできます.
#include
    #include

    using namespace std ;

    int main()
    {
        vector< vector<int> > b(10, vector<int>(5, 0)) ;

        //         
        cin>>b[1][1] ;
        cin>>b[2][2] ;
        cin>>b[3][3];

        //    
        int m, n ;
        for(m=0; m<b.size(); m++)           //b.size()        
        {
            for(n=0; n<b[m].size(); n++)    //              
                cout<<b[m][n]<<" " ;
            cout<<"
"
; } return 0; }

vectorはベクトルタイプで、いくつかの整数のような多くのタイプのデータを収容できるので、コンテナと呼ばれます.vectorはC++STLの重要なメンバーであり、ヘッダファイルを含める必要があります.
#include; 一、vectorの初期化:以下のように5つの方法があります.
 (1) vector<int> a(10); //   10        (          ,             ),       ,       。2)vector<int> a(10,1); //   10        ,           13)vector<int> a(b); // b     a  ,       4)vector<int> a(b.begin(),b.begin+3); //   a  b  0   2 ( 3 )  5int b[7]={1,2,3,4,5,9,8};
        vector<int> a(b,b+7); //        

二、vectorオブジェクトのいくつかの重要な操作を例に挙げて説明します.
1)a.assign(b.begin(), b.begin()+3); //b   , b 0~2          a2)a.assign(4,2); // a  4   ,      23)a.back(); //  a       4)a.front(); //  a      5)a[i]; //  a  i   ,    a[i]  2013-12-076)a.clear(); //  a    7)a.empty(); //  a    ,    ture,     false8)a.pop_back(); //  a         9)a.erase(a.begin()+1,a.begin()+3); //  a  1 (  0   )  2   ,          a.begin()+1  (   )   a.begin()+         3(    )10)a.push_back(5); // a              ,   511)a.insert(a.begin()+1,5); // a  1   (  0   )       5, a 1,2,3,4,      1,5,2,3,412)a.insert(a.begin()+1,3,5); // a  1   (  0   )     3  ,    513)a.insert(a.begin()+1,b+3,b+6); //b   , a  1   (  0   )     b  3     5   (   b+6), b 1,2,3,4,5,9,8         ,      1,4,5,9,2,3,4,5,9,814)a.size(); //  a      ;15)a.capacity(); //  a               16)a.resize(10); // a         10 ,   ,   ,    17)a.resize(10,2); // a         10 ,   ,   ,   218)a.reserve(100); // a   (capacity)   100,        a.capacity();       100.          a                        ,                ( a             ,         ) 19)a.swap(b); //b   , a     b           20)a==b; //b   ,         !=,>=,<=,>,<

三、vectorに順次アクセスするいくつかの方法は、(1)ベクトルaに要素1を追加する、
1  vector<int> a;
2 for(int i=0;i<10;i++)
3 a.push_back(i);

2、配列から要素を選択してベクトルに追加することもできます
int a[6]={1,2,3,4,5,6};
vector<int> b;
for(int i=1;i<=4;i++)
b.push_back(a[i]);
 

3、既存のベクトルから要素を選択してベクトルに追加することもできます
int a[6]={1,2,3,4,5,6};
vector<int> b;
vector<int> c(a,a+4);
for(vector<int>::iterator it=c.begin();it<c.end();it++)
b.push_back(*it);

4、ファイルから要素を読み込んでベクトルに追加することもできます
ifstream in("data.txt");
vector<int> a;
for(int i; in>>i)
    a.push_back(i);

5、【誤区】
vector<int> a;
for(int i=0;i<10;i++)
    a[i]=i;
//                。           ,    ,              ,    a[i]      

(2)ベクトルから要素1を読み出し、下付きで読み出す
int a[6]={1,2,3,4,5,6};
vector<int> b(a,a+4);
for(int i=0;i<=b.size()-1;i++)
    cout<<b[i]<<" ";
 

2、遍歴器による読み取り
int a[6]={1,2,3,4,5,6};
vector<int> b(a,a+4);
for(vector<int>::iterator it=b.begin();it!=b.end();it++)
    cout<<*it<<" ";

四、いくつかの重要なアルゴリズムで、使用時にヘッダファイルを含める必要があります.
#include1sort(a.begin(),a.end()); //  a   a.begin()(   ) a.end()(    )           2reverse(a.begin(),a.end()); //  a   a.begin()(   ) a.end()(    )     ,    , a    1,3,2,4,    4,2,3,13copy(a.begin(),a.end(),b.begin()+1); //  a   a.begin()(   ) a.end()(    )      b , b.begin()+1   (   )            ,       4find(a.begin(),a.end(),10); //  a   a.begin()(   ) a.end()(    )      10,