C++学習整理(シーケンスコンテナ)

8722 ワード

じゅんじょようき
1、標準ライブラリarrayは固定サイズを有する
array<int,10>;
array<int,20>;
  • array配列のコピーまたは付与操作
  • int digs[10] = {0,1,2,3,4,5,6,7,8,9};
    int cpy[10] = digs; //error,              
    array<int,10> digs1 = {0,1,2,3,4,5,6,7,8,9};
    array<int,10> cpy1 = digs1;

    2、assign(arrayを除く):左のコンテナのすべての要素を次のように、要素(のコピー)で置き換えることができます.
    list<string> names;
    vector<const char *> oldstyle;
    names = oldstyle;//error,       
    names.assign(oldstyle.cbegin(),oldstyle.cend());//ok,   const char*     string
    
    list slit(1);//1   ,  string
    slit.assign(10,"Hi");

    3、swapの使用:2つの同じデータ構造の内容を交換することができる(arrayを除いて、swapはいかなる要素に対してコピー、削除あるいは挿入操作を行わないので、定数時間内に完成することを保証できる)4、順序容器に内容を追加する
    c.insert(p,t)
    c.emplace(p,args)
    //    p      ,            
    //insert emplace   :insert          ,        ;emplace            。
    //       vector,deque,string     ,      (      )
    //                       ,      
    vector<> v;
    list<string> l;
    
    l.insert(l.begin(),"hello!");//   l.push_front("hello!");
    
    v.insert(v.end(),10,"hello");//     10   
    
    l.insert(l.begin(),l.end()-2,l.end());//            

    5、要素がアクセスする時、できるだけc.at(n)を使って、下のnという参照を返して、境界を越えた時に異常を投げ出す.6、要素の削除:(要素を1つだけ削除するか、反復器で指定した範囲を削除することができます)
    ...
    c.erase(p)//     p     ,               
    c.erase(b,e)//      
    ...
    list l;
    l.clear();
    l.erase(l.begin(),l.end());//  

    7、2つのバージョンはlistのすべての奇数、チェーンテーブルと単一チェーンテーブルを削除する
    //①
    list<int> lst = {0,1,2,3,4,5,6,7,8,9};
    auto it = lst.begin();
    while (it != lst.end()){
        if (*it % 2 == 0)
            it = lst.erase(it);
        else
            ++it;
    }
    //②
    forward_list<int> flst = {0,1,2,3,4,5,6,7,8,9};
    auto pre = flst.before_begin();//     (      ),    
    auto cur = flst.begin();
    while (cur != flst.end()){
        if (*cur % 2 == 0)
            cur = flst.erase_after(pre);
        else
            pre = cur;
    }

    8、容器の大きさを変える
    list<int> l(10,42);//10g   ,   42
    l.resize(15);//15   , 5  0
    l.resize(20,-1);// l   5   ,   -1
    l.resize(5,1);//    ,  5 
    

    9、vectorオブジェクトの増加
  • vectorおよびstringオブジェクトは、通常、新しい空間を取得する際に、新しい空間よりも大きな空間を割り当てる.
  • 一部メンバー関数:
  • c.shrink_to_fit();// capacity    size    
       c.capacity();//c       
       c.size();//c      
       c.reserve(n);//      n        
       //reserve            ,    vector            , reverse        

    10、string追加の操作
  • 追加の構成方法:
  • string s(cp,n);//  cp    n 
         string s(s2,pos2);// s2 pos2    
         string s(s2,pos2,len);
         //                   ,             ,           
  • substr(pos,n);
  • append(str),replace(pos,erase_num,str);
  • 検索操作:(結果が見つからずstring::nposを返す)
  • ////  name       ,  1
        string numbers("0123456789"),name("r2d2");
        auto pos = name.find_first_of(numbers);
        ////  name          
        auto pos1 = name.find_first_not_of(numbers);
    
  • 数値変換:
  • ////
    int i = 42;
    string s = to_string(i);
    double d = stod(s);
    ////********
    string s2 = "pi = 3.14";
    d = stod(s2.substr(s2.find_first_of("+-.0123456789")));//d = 3.14 

    参考『C++Primer』