string、vectorなどの容器、反復器のポイント

5264 ワード

要点のみを記録する.
文書ディレクトリ
  • string
  • 初期化string
  • stringクラスのメンバー関数
  • string読み出し
  • getline読み出し1行
  • C標準ライブラリString関数
  • line.size();line.empty();
  • string::size_typeタイプ、decltype
  • stringのインデックス
  • 1下付き演算子`[]`,
  • 反復器
  • 標準ライブラリvector
  • vectorオブジェクト
  • を初期化する.
  • vector操作
  • 反復器
  • 反復器のタイプ
  • 反復器の動作
  • string
    ヘッダファイル:#include using std::string;厳密にはstringオブジェクトはコンテナタイプに属しませんが、stringはコンテナと同様の操作を多くサポートします.
    初期化string
    string s1
    string s2(s1)
    string s2=s1
    string s3("hello")
    string s3="value"
    string s4(n,'c') n   c    
    ####         
    

    cctypeヘッダファイルの関数
    #include == #include"ctype.h"
    isalnum(c)  c      
    iscntrl(c)
    isdigit(c)
    isgraph(c)
    ispunct(c)       ( c      ,    ,         )
    isxdigit(c)     
    islower(c)    
    isupper(c)
    tolower(c)    
    toupper(c)
    

    違いは、等号の実際に実行されるのはコピー初期化であり、等号を使用しないのは直接初期化である.
    stringクラスのメンバー関数
    os<>s
    getline(is,s)  is       s,  is
    s.empty()
    s.zie()
    s[n]
    s1+s2//               string
    s1=s2
    s1==s2 
    != >= <=
    

    string読み出し
    int main(){
    	string s1,s2;
    	cin>>s1,s2;
    	cout<

    読み取り時にstringオブジェクトは、先頭の空白(スペース、改行、タブ)を自動的に無視し、次の空白に遭遇するまで最初の本当の文字から読み始めます.
    getline行全体を読み込む
    getlineは入力時の空白文字を保持できます.getlineのパラメータは入力ストリームとstringオブジェクトです.改行に遭遇するまで(改行も読み込まれました).getlineはストリームパラメータを返します.string line;getline(cin,line);C標準ライブラリString関数
    cstringヘッダファイルでは、cstringはC意味ヘッダファイルstringである.hのC++バージョン.
                            。
    #include
    strlen(p);
    strcmp(p1,p2);
    strcat(p1,p2);  ,  p1
    strcpy(p1,p2);
    string         c_str     ,      C      。            ,                 。
    string s("hello world");
    char *str=s;//  ,   string     char*
    const char *str=s.c_str();
    

    line.size();line.empty();
    string::size_typeタイプ、decltype
    size関数は、string::sizeタイプの値を返します.stringクラスおよびその他のほとんどの標準ライブラリタイプは、いくつかのセットタイプを定義しています.これらのセットタイプの画像は、標準ライブラリと機械に関係のない特性、タイプsize_typeはその一つです.string::size_typeは符号なしタイプの値です.stringクラスを格納するsize関数の戻り値に使用されるすべての変数はstr//:size_である必要があります.typeタイプです.C++11は、autoまたはdecltypeによって変数のタイプを推定することを許可するauto len=line.size();式にsize関数がすでに存在する場合、intを使用しないでください.for(auto c:str) c=toupper(c);を用いてstring内の単一文字を処理する.キーワードdecltypeを使用して値のタイプを検出できます.
    stringのインデックス
    stringオブジェクトにアクセスする単一文字の2つの方法:下付き文字と反復器
    1下付き演算子[]
    受け取ったのはstring::size_typeタイプの値.s[s.size()-1]は、文字列が定数でない限り、下付き演算子が返す文字に新しい値を割り当てる最後の文字です.
    2反復
    標準ライブラリvector
    ヘッダファイル#include using std::vector vectorは、タイプではなくテンプレートであるクラステンプレートです.したがってvectorを使用する場合は、コンパイラがクラスまたは関数のインスタンスをどのようなタイプにするべきかを指摘する必要があります.コンパイラがテンプレートに基づいてクラスまたは関数を作成するプロセスをインスタンス化instantiationと呼びます.
    vectorオブジェクトの初期化
    vector v1;
    vector v2(v1);
    vector v2=v1;
    vector v3(n,val);
    vector v4(n);
    vector v5{a,b,c}
    vector v5={a,b,c}
    

    通常、vectorオブジェクトに格納される要素の数だけを初期値を省略することなく指定できます.ライブラリには、値が初期化された要素の初期値が作成されます.ベクトルサイズvector vi=10; , リストの初期値または要素数の真の意味は、初期値を渡すときにカッコまたはカッコに依存するかどうかを直接初期化する形式で指定する必要があります.
    vector操作
    s.begin()およびs.end()関数は、反復器の初期値としてよく使用されます.
    反復器
    反復演算子
    *ter   
    iter->mem
    ++iter
    --iter
    == !=
    

    反復器のタイプvector::iterator it; string::iterator it2のような下の2つは、要素を読むことができ、要素を書くことができない反復器vector::const_iterator it; string::const_iterator it2です.
    反復器の操作
    v.push_back(i);
    v.empty()
    (*it).empty()
    it->empty()
    v.size()
    v[n]       ,    
    v1=v2
    v1-{a,b,c}
    == >= <= !=
    v.begin() v.end()
    v.cbegin() v.cend()
    
    iter+n
    iter-n
    iter1 - iter2
          difference_type     
    auto mid = vi.begin() + vi.size()/2
    auto mid = vi.begin() + (end-begin)/2
    

    stringとvectorの要素は連続したメモリ空間に保存されるため、ランダムアクセスが速い.ただし、エレメントの中間追加と削除には時間がかかります.また、要素を追加するには、追加のストレージ領域を割り当てる必要がある場合があります.この場合、各要素は新しいストレージ領域に移動する必要があります.
    リストとforward_Listの目的は、コンテナの任意の場所での追加と削除操作を迅速にすることです.代わりに、この2つのコンテナはランダムアクセスをサポートしません.
    dequeはランダムアクセスをサポートし、削除要素を中間に追加するコストが高い.しかし、両端に要素を追加および削除するのは速いです.
        
    iterator            
    const_iterator       ,             
    size_type      ,                   
    difference_type        
    value_type     
    reference        , value_type&    
    const_reference    const    
        :
    C c;
    C c1(c2);
    C c(b,e);     b e            c
    
    C c{a,b,c}       
       swap
    c1=c2
    c1={a,b,c}
    a.swap(b)   ab   
      c.size()
    c.max_size()
    c.exmpy()     
      \    
    c.insert(args)
    c.emplace(inits)   inits  c      
    c.erase(args)   args     
    c.clear()        
         
    == !=  > >= < <=
         
    c.begin()   c.end()           
    c.cbegin()  c.cend()   const_iterator
             (   forward_list)
    reverse_iterator            
    const_reverse_iterator             
    c.rgegin()  c.rend()                  
    c.crbegin() c.crend()   const_reverse_iterator
    
    

    反復範囲
    1つの反復範囲は、1対の反復で表され、それぞれ先頭要素と末尾要素を指します.すなわちbeginとendです.2番目の反復器は、範囲内の最後の要素を指さすことはありません.左閉じ右開き
    beginとendが等しい場合、範囲は空です.