C++Primer(第5版)第3章文字列、ベクトル、配列


目次
ネーミングスペース
標準ライブラリstring
1.stringの定義と初期化
2.stringオブジェクトでの操作
3.string中文字の処理
標準ライブラリvector
1.vectorオブジェクトの定義と初期化
2.要素の追加
3.その他のvector操作
反復器の紹介
1.反復器の使用
2.反復演算
はいれつ
1.組み込み配列の定義と初期化
2.配列要素へのアクセス
3.ポインタと配列
4.cスタイル文字列
5.多次元配列
ネーミングスペース
前にライブラリ関数を使用すると、std::coutなどの名前空間が付きます.std名前空間からのcout関数を表しますが、この方法は煩雑で、簡単な宣言方法です.
using namespace::name
宣言があれば、ライブラリ関数nameを使用するたびにnamespaceを前に付ける必要はありません.
注意:using宣言はヘッダファイルには含まれません.ヘッダファイルが他の参照ファイルにコピーされる可能性があるため(#include)、ネーミング競合が発生しやすいです.
標準ライブラリstring
1.stringの定義と初期化
5つの方法:
string s1;//     ,  
string s2 = s1;//     ,s2 s1   
string s3(s1);//     , s1   
string s4 = "Hello World!";//        ,      
string s5("Hello World!");//  s4
string s6(n,'c');//s6 n 'c'  

使用する等号の場合はコピー初期化、その他は直接初期化です.当初の初期値が1つしかなかった場合、両方とも可能であったが、複数の値の場合s 6のように、直接初期化するしかなかった.
2.stringオブジェクトでの操作
string操作
os<
出力ストリームosにsを書き込み、osに戻る
is>>s
入力ストリームisから読み出した文字列はsに割り当てられ、空白の区切りはisを返します.
getline(is,s)
入力ストリームisから1行を読み出してsにコピーし、isを返す
s.empty()
sは空でtrueを返します
s.size()
sサイズと文字数を返します
s[n]
下付き演算は、sのn番目の文字の参照を返し、nは0から始まる
s1+s2
s 1とs 2の接続の結果を返します
s1=s2
s 1の元の内容の代わりにs 2のコピーを使う
s1 == s2
s 1とs 2は等しくtrueを返す
s1 != s2
s 1とs 2が等しくないtrueを返す
,>=
比較
読み取り時に空白文字(スペース、タブ、改行)が自動的に無視され、最初の本当の文字から空白になるまで読み始めます.(出力はしません)
s.size()が返すタイプはstring::size_typeは、符号なしタイプであり、十分なサイズのstringオブジェクトを置くことができる.注意s.size()を使用した後はint型で比較しないでください.
string比較:
  • の2つの文字列を比較し、2つの長さが異なる場合、短いstringが長いstringの前の対応する位置の文字と同じである場合、長いstirngは短いstring
  • より大きい.
  • 2 2 2つのstringがいくつかの位置で文字が異なる場合、2つのstringは実際には異文字の文字面値サイズの比較
  • である.
    文字列と文字面値の加算は、両文字列の文字面値が加算できないことに注意する(+番号の両側に少なくとも1つのstringオブジェクトがあると理解できるが、実際に判断する必要がある)
    string s1;
    string s2 = s1 + "hello" + "world";
    string s3 = "hello" + "world" + s1;//  

    s 2は結合法則によって
    string s2 = (s1 + "hello") + "world";

    したがって、2文字列の文字面値の加算はありません.
    注意:C++の文字列のフォント値はstringオブジェクトとは異なるタイプです.
    3.string中文字の処理
    stringタイプの文字を判断したり、処理したりすることができます.
     
    isalnum(c)
    文字または数字が真である
    isalpha(c)
    アルファベットが本物です
    iscntrl(c)
    制御文字が真である
    isdigit(c)
    数字が本物
    isgraph(c)
    空白ではありませんが、真に印刷できます.
    islower(c)
    小文字が本物です
    isupper(c)
    大文字が真である
    isprint(c)
    真(cはスペースまたはビジュアル)として印刷できます.
    ispunct(c)
    句読点が真である
    isspace(c)
    空白が真(スペース、製表、改行、リターン)
    isxdigit(c)
    16進法を真とする
    tolower(c)
    小文字に変換
    toupper(c)
    大文字に変換
    注意:以上は単一の文字を操作するため、string全体を巡回します.
    遍歴には2つの方法が使用できます.
    範囲for文.
    for(declaration:expression)
        statement
    
    
    string str = "Hello World";
    for(auto c:str)
    {
        std::cout << c.toupper;
    }

    下付き文字下付き演算子([]).注意下書きを使うときは必ず溢れないように注意してください.すなわち、下の値は0より大きく、文字列のsize()より小さくなければならない.
    string str = "Hello world";
    for(int i=0; i

    標準ライブラリvector
    1.vectorオブジェクトの定義と初期化
    vector v1
    空のvector、タイプT
    vector v2(v1)
    v 2はv 1のコピーで、すべてのv 1の要素をコピーします.
    vector v3 = v1
    v 3はv 1のコピーで、すべてのv 1の要素をコピーします.
    vector v4(n)
    v 4にはn個の要素が含まれており、各要素はデフォルトの初期化を実行する
    vector v5(n,val)
    v 5にはn個の繰り返し要素があり、値はvalである.
    vector v6{a,b,c...}
    v 6は{}内のすべての要素を含む
    vector v7 = {a,b,c...}
    v 6に等しい
    注意:カッコ優先リストの初期化は、リストの初期化ができない場合は直接初期化(カッコ類似)に変わり、カッコは直接初期化になります.
    vector v1(10);//10   ,         
    vector v2{10};//    10
    
    vector v3{10};//       ,      10   ,         
    vector v4{10,"hi"};//       ,      10   ,     "hi"

    2.要素の追加
    push_back.コンテナの最後に要素を追加します.コンテナを巡るサイクル内で実行しないでください.そうしないと、ワイヤレスサイクルが発生します.
    3.その他のvector操作
    v.empty()
    vは空でtrueを返す
    v.size()
    vサイズと文字数を返します
    v[n]
    下付き演算は、sのn番目の文字の参照を返し、nは0から始まる
    v.push_back(t)
    tをvの末尾に加算
    v1=v2
    v 1の元の内容の代わりにv 2のコピーを使用
    v={a,b,c...}
    vの内容を{}の内容で置き換える
    v1 == v2
    v 1とv 2は等しくtrueを返す
    v1 != v2
    v 1とv 2が等しくない場合はtrueを返します
    ,>=
    比較
    反復器の紹介
    1.反復器の使用
    反復器はstringやvectorなどのオブジェクトにアクセスするための要素です.
    ポインタとは異なり、反復器はアドレスを取る必要はなく、beginやendなどのメンバー関数によって一般的に得られます.beginは最初の要素を指す反復器を返し、endは最後の要素を指す反復器を返し、「末尾」反復器とも呼ばれ、無効でアクセスできません.
    反復器の基本演算子
    *iter
    反復器が指す要素の参照を返します.
    iter->mem
    iterのメンバーmemへのアクセス
    ++iter
    1つ後ろに移動
    --iter
    前へ移動
    iter1 == iter2
    2つの反復器が等しいかどうかを判断します.同じ要素または同じ容器の末尾の反復器を示す場合は、等しいです.
    iter != iter2
    反復タイプ
    とsize_typeメンバーと同様に、前にタイプ名が付きます.反復器にはiteratorとconstがあります.iterator 2種
    vector::iterator it;
    vector::const_iterator it2;
    
    vector::iterator it3;
    vector::const_iterator it4; 

    2.反復演算
    iter + n
    n位置を前方に移動する反復器を返します
    iter - n
    n位置を後方に移動する反復器を返します
    iter += n
    iterをn位置後ろに移動
    iter -=n
    iter前方移動n位置
    iter1 - iter2
    両者の距離を取得します.タイプはdeifferent_です.type
    >、=、<=
    演算に関与する反復器は同じコンテナでなければなりません
    はいれつ
    vectorのようなデータ構造ですが、サイズが固定されているため、特定のプログラムではパフォーマンスが向上しますが、柔軟な行は悪くなります.
    1.組み込み配列の定義と初期化
    配列のサイズは固定されているため、初期化時に次元は定数式でなければなりません.
    配列を定義するときは配列タイプを指定する必要があります.autoを使用してタイプを取得することはできません.
    また、配列はオブジェクトではないため、配列の参照は存在しません.
    初期化配列を表示
    リストの初期化時に次元を無視できます.コンパイラはリスト要素に基づいて配列次元を推定します.
    次元が指定されている場合、初期化時に要素の個数は配列次元より大きくないでください.より小さい場合、配列の前の要素が初期化されます.残りの要素はデフォルトで初期化されます.
    int a[] = {3,4};//a    ,   3,4
    int a2[5] = {1,2,3};//5   ,1,2,3,0,0
    int a3[2] = {1,2,3};//  ,    

    文字配列の特殊性
    文字列のフォント値を使用して文字配列を初期化する場合は、文字列のフォント値に空の文字があることに注意してください.だから長さがこぼれないように注意します.
    割り当てとコピーは許可されていません
    配列は、別の配列に値を割り当てることはできません.ただし、配列の値で他の配列を初期化できます.
    複雑な配列の宣言の理解
    配列の宣言は内側から外側に見ることができます.
    int *p[10];//p   10 int *     
    int (*p)[10];//p     ,    10 int      
    
    int (&r)[10] = arr;//r      10 int      
    int &r[10] = arr;//  

    2.配列要素へのアクセス
    下付き文字を使用します.
    3.ポインタと配列
    配列名は、配列の最初の要素を指すポインタを表します.
    したがってautoを使用して配列名を作用させると、ポインタタイプが得られます.decltypeでは上記の遷移は発生しません.
    ポインタが配列内の要素を指す限り、下付きスケール演算を実行でき、下付きスケール値はint(負数)
    int a[10] = {1,2,3,4,5,6,7,8,9,0};
    int *p = a;
    int i = *(p+1);
    int j = p[1];
    int k = p[-9];//i,j,k     2,              a      

    4.cスタイル文字列
    文字列の文字面値は、文字配列に入れると空の文字で終わり、一般的にポインタを使用して文字列を操作します.
    strlen(p)
    pの長さを返し、空の文字は含まれません.
    strcmp(p1,p2)
    等しい値は0を返し、大きい値は正を返し、小さい値は負を返します.
    strcat(p1,p2)
    p 2がp 1に接続された後、p 1に戻る
    strcpy(p1,p2)
    p 2はp 1にコピーされ、p 1に戻る
    このクラスライブラリ関数に入力されるポインタは、空の文字列で終わる文字配列を指す必要があります.
    5.多次元配列
    配列と同様に、各配列を表す要素は、次の配列サイズを含む配列です.針も.