C++中STLはどう使いますか?いつ使いますか.

17341 ワード

arrayを使用するには、ヘッダファイル#include を導入する必要があります.
    array C++11          ,       ,
    array        ,         ,          。
            ,           ,          ,    array     。

    array     ,            ,               。

          :

             :           

    int arr[10]; //10   0 int   

    int arr[5]={1,2,3,4,5};

    int arr[]={1,2,3};//   3    ,         

    int arr[5]={1,2,3};              ,          

                    !!!                


    array    :         

    array ial;

    array ial1={0,1,2,3};

           ,array                 

    array copy=ial1;//              (         )

使用方法:
         :  、  、   ( vector、array              )

                   ,             。
         vector、string array                   ,          。

      :int *p=&arr[2];//p          ,            

    int j=p[1];//p[1]   *(p+1),   arr[3]

    int i=p[-2];//   *(p-2),   arr[0]

                       

                     

    int *p=arr;  int *p=&arr[0];     ,                 。

     c++11                ,
             ,         ,       ,       begin() end()  

    int *beg=begin(arr);//     

    int *last=end(arr);//         

      ,        ,        for  。


    array   

    array         array       ,
              ,         ,
                  ,           。

              array   

    1.       

         C c(b, e);//    b e        c

        C1={a,b,c...};         C1

    2.          ,  array      。

         ,array        。    :

    1.         ,          

    2.  swap  ,a.swap(b);  swap(a,b);       

    3.          

    array       ,             。array               ,
                 ,   array          。

上記の比較に基づいて、使用中にvectorやmapを配列として使用する方法を解放することができ、arrayを直接使用することができます.配列を通常使用しているが,自分が使用している過程でのセキュリティに疑問があるコードをarrayで解放することもできる.
2.mapの使用は、2つの緊密な変数の構造体として使用することができる.多項式の指数と係数のように、両者は同生同滅である.
        1

        map mapStudent;

          
        2.     
        1
        2
        3
        4
        5
        6

        // insert    pair
            mapStudent.insert(pair("r000", "student_zero"));

        // "array"    
            mapStudent["r123"] = "student_first";
            mapStudent["r456"] = "student_second";

          
        3.   


           ,         ,    ,  iter end      


        1
        2
        3
        4
        5
        6

        iter = mapStudent.find("r123");

        if(iter != mapStudent.end())
               cout<second<

mapのfind()関数は要素が見つからないとend反復器を返します.
           map        map  key  value 。


        map mp;

        map::iterator it= mp.begin();

        int key = it->first;    key 。

        double value = it->second;        value 。









                 scanf           

                       -1

            -1       0

            while(~scanf("%d", &n))              

               ~


             string    :
#include 
                    #include 
                    #include 

                    using namespace std;

                    int main()
                    {
                        string s,s2;

                        cin>>s>>s2;

                        cout<cout<int a=(s==s2);

                        cout<cout<cout<cout<return 0;
}

7,mapの基本操作関数:C++Mapsは、キーワード/値ペアbegin()がmapヘッダを指す反復器clear()を返すすべての要素count()を削除して指定した要素が現れる回数empty()mapが空の場合true end()がmapの末尾を指す反復器equal_を返す関連コンテナです.range()特殊なエントリを返す反復器はerase()要素find()を削除して要素get_を検索するallocator()はmapのコンフィギュレーションinsert()挿入要素key_を返します.comp()は比較要素keyの関数lower_を返すbound()戻りキー値>=与えられた要素の最初の位置max_size()は、収容可能な最大要素数rbegin()を返し、mapの末尾を指す逆反復器rend()を返し、mapのヘッダを指す逆反復器size()を返し、mapの要素の数swap()を返して2つのmap upper_を交換するbound()戻りキー値>指定した要素の最初の位置value_comp()は比較要素valueの関数を返します
C++には、シーケンスコンテナと関連コンテナの2種類があります.シーケンスコンテナは主にvector,list,dequeなどがある.ここでvectorは連続メモリを表し、配列に基づいて実装され、listは非連続メモリを表し、チェーンテーブルに基づいて実装され、dequeはvectorと似ていますが、ヘッダ要素の挿入と削除の双方向サポートを提供します.関連コンテナには主にmapとsetがあります.mapはkey-value形式で、setは単一値です.mapとsetは唯一のkeyしか保存できません.multimapとmultisetは同じkeyを複数保存できます.
コンテナクラスはメモリを自動的に申請および解放するため、newおよびdelete操作は必要ありません.
一、vector
vectorはテンプレートに基づいて実装され、ヘッダファイルvectorを含める必要があります.
1.定義と初期化
 //1.      

    vector<int> vec1;    //     ,vec1  

    vector<int> vec2(vec1);  //  vec1   vec2

    vector<int> vec3(vec1.begin(),vec1.end());//  vec1   vec2

    vector<int> vec4(10);    //10      

    vector<int> vec5(10,4);  //10      



    //2.      

    vec1.push_back(100);            //    

    int size = vec1.size();         //    

    bool isEmpty = vec1.empty();    //      

    cout<0]<//       

    vec1.insert(vec1.end(),5,3);    // vec1.back          

    //vec1.pop_back();              //      

    //vec1.erase(vec1.begin(),vec1.end());//       ,      

    cout<true:false;  //      ==、!=、>=、<=...

    vector<int>::iterator iter = vec1.begin();    //        

    vector<int>::const_iterator c_iter = vec1.begin();   //  const     

    //vec1.clear();                 //    



    //3.  

    //   

    int length = vec1.size();

    for(int i=0;icout<cout<//    

    vector<int>::const_iterator iterator = vec1.begin();

    for(;iterator != vec1.end();iterator++)

    {

       cout<

三、list
Listはstlで実装された双方向チェーンテーブルであり、ベクトル(vectors)に比べて迅速な挿入と削除が可能であるが、ランダムアクセスは遅い.ヘッダファイルリストを追加する必要があります
   //1.      

    list<int> lst1;          //   list

    list<int> lst2(3);       //         list

    list<int> lst3(3,2); //         list

    list<int> lst4(lst2);    //  lst2   lst4

    list<int> lst5(lst2.begin(),lst2.end());  // lst4



    //2.      

    lst1.assign(lst2.begin(),lst2.end());  //   

    lst1.push_back(10);                    //   

    lst1.pop_back();                   //     

    lst1.begin();                      //        

    lst1.end();                            //        

    lst1.clear();                      //   

    bool isEmpty1 = lst1.empty();          //    

    lst1.erase(lst1.begin(),lst1.end());                        //    

    lst1.front();                      //          

    lst1.back();                       //           

    lst1.insert(lst1.begin(),3,2);         //        

    lst1.rbegin();                         //            

    lst1.remove(2);                        //         

    lst1.reverse();                        //  

    lst1.size();                       //      

    lst1.sort();                       //  

    lst1.unique();                         //        



    //3.  

    //    

    for(list<int>::const_iterator iter = lst1.begin();iter != lst1.end();iter++)

    {

       cout<cout<

四、deque
Dequeコンテナクラスはvectorと同様に、ランダムアクセスと高速挿入削除をサポートし、コンテナ内のある場所での操作にかかる線形時間です.vectorとは異なり、dequeは先頭からデータを挿入することもサポートします:push_front().残りはvector操作方法の使用に似ています.
五、map
C++のmapコンテナにはキー値ペア(key/value)コンテナが用意されています.mapとmultimapの違いは、multipleが1つのキーに複数の値を対応させることを許可することだけです.ヘッダファイルmapを含める必要があります.反復器では、keyを変更することなく実値を変更できます.Mapはkeyに基づいて自動的にソートされます.
 //1.      

    map<int,string> map1;                  // map



    //2.      

    map1[3] = "Saniya";                    //    

    map1.insert(map<int,string>::value_type(2,"Diyabi"));//    

    //map1.insert(pair(1,"Siqinsini"));

    map1.insert(make_pair<int,string>(4,"V5"));

    string str = map1[3];                  //  key  value,key    

    map<int,string>::iterator iter_map = map1.begin();//        

    int key = iter_map->first;             //  eky

    string value = iter_map->second;       //  value

    map1.erase(iter_map);                  //       

    map1.erase(3);                         //  key  value

    map1.size();                       //    

    map1.empty();                       //   

    map1.clear();                      //      



    //3.  

    for(map<int,string>::iterator iter = map1.begin();iter!=map1.end();iter++)

    {

       int keyk = iter->first;

       string valuev = iter->second;

    }

六、set
setの意味は集合で、それは秩序ある容器で、中の要素はすべて並べ替えられていて、挿入、削除、検索などの操作をサポートして、1つの集合のようです.すべての操作は厳格にlogn時間内に完了し,非常に効率的である.setとmultisetの違いは、setが挿入する要素は同じではありませんが、multisetは同じであってもよいということです.Setはデフォルトで自動的にソートされます.使用方法はlistに似ています.
七、各種容器まとめ
(1)vector内部データ構造:配列.各要素にランダムにアクセスし、必要な時間は定数です.末尾で要素を追加または削除するのに要する時間は、要素の数に関係なく、中間または先頭で要素を追加または削除するのに要する時間は、要素の数によって線形に変化します.要素を動的に増やしたり減らしたりすることができ、メモリ管理は自動的に完了しますが、プログラマはreserve()メンバー関数を使用してメモリを管理できます.vectorの反復器は、メモリの再割り当て時に失効します(操作の前後でエレメントが同じではありません).capacity()-size()を超えるエレメントをvectorに挿入すると、メモリが再割り当てされ、すべての反復器が失効します.そうでない場合、現在の要素以降の任意の要素を指す反復器は無効になります.要素を削除すると、削除された要素以降の任意の要素を指す反復器が無効になります.
(2)deque内部データ構造:配列.各要素にランダムにアクセスし、必要な時間は定数です.最初と最後に要素を追加するのに要する時間は、要素の数に関係なく、要素を追加または削除するのに要する時間は要素の数によって線形に変化します.要素を動的に増やしたり減らしたりすることができ、メモリ管理は自動的に完了し、メモリ管理に使用するメンバー関数は提供されません.任意の要素を追加するとdequeの反復器が無効になります.dequeの中間で要素を削除すると、反復器が無効になります.Dequeのヘッダまたはテールで要素を削除すると、その要素を指す反復器のみが無効になります.
(3)list内部データ構造:双方向環状チェーンテーブル.要素にランダムにアクセスできません.双方向に遍歴できる.エレメントを先頭、末尾、中間の任意の場所で追加または削除するのに要する時間は定数です.要素を動的に増やしたり減らしたりすることができ、メモリ管理が自動的に完了します.任意の要素を追加しても、反復器は無効になりません.要素を削除すると、現在削除されている要素を指す反復器以外は無効になりません.
(4)slist内部データ構造:一方向チェーンテーブル.双方向に遍歴することはできません.前から後まで遍歴するしかありません.他の特性はlistと似ている.
(5)任意のタイプのシーケンスコンテナをスタックに変換できるstackアダプタで、一般的にdequeをサポートするシーケンスコンテナとして使用します.要素は後進先出(LIFO)のみです.stack全体を巡ることはできません.
(6)任意のタイプのシーケンスコンテナを1つのキューに変換できるqueueアダプタで、一般的にdequeをサポートするシーケンスコンテナとして使用します.要素は先に出るしかありません(FIFO).queue全体を巡ることはできません.
(7)priority_queueアダプタは、任意のタイプのシーケンスコンテナを優先順位キューに変換することができ、一般的にvectorを最下位ストレージとして使用します.最初の要素にのみアクセスでき、priority全体を巡回することはできません.queue. 最初の要素は常に優先度が最も高い要素です.
(8)setキーと値は等しい.キーがユニークです.要素はデフォルトで昇順に並べられます.反復器が指す要素が削除されると、反復器は無効になります.その他の要素を追加、削除する操作は、反復器を無効にしません.
(9)multisetキーは一意でなくてもよい.その他の特徴はsetと同じです.
(10)hash_setはsetと比較して、その中の要素は必ずしもソートされているわけではありません.使用するhash関数に従って割り当てられ、より速い検索速度を提供します(もちろんhash関数と関係があります).その他の特徴はsetと同じです.
(11)hash_Multisetキーは一意でなくてもよい.その他の特徴とhash_setは同じです.
(12)mapキーは一意である.要素のデフォルトのキーの昇順の配置.反復器が指す要素が削除されると、反復器は無効になります.その他の要素を追加、削除する操作は、反復器を無効にしません.
(13)multimapキーは一意でなくてもよい.その他の特徴はmapと同じです.
(14)hash_mapはmapと比較して、その中の要素は必ずしもキー値で並べ替えられているわけではありません.使用するhash関数に従って割り当てられており、より速い検索速度を提供することができます(もちろんhash関数にも関係しています).その他の特徴はmapと同じです.
(15)hash_Multimapキーは一意でなくてもよい.その他の特徴とhash_mapは同じです.