【C++primer学習】第3章文字列、ベクトル、配列

4296 ワード

この章はとても重要な感じがして、leetcodeをブラシする時もvectorとstringをよく使います.pythonはリストや文字列を処理するのに便利だと感じ、C++はstringやvectorコンテナを導入し、便利になりました.
3.1ネーミングスペースのusing宣言
私たちが使用するライブラリ関数は基本的にネーミングスペースstdに属します.
std::cinは、標準入力からコンテンツを読み出し、ネーミングスペースstdの名前cinを使用することを示す.::ドメインオペレータとは、コンパイラが左側の名前が示す役割ドメインから右側の名前を探すことを意味します.
しかし、この表現は煩雑なので、using宣言を使用して簡略化します.
using namespace::name;

注意:ヘッダファイルにusing宣言は含まれないでください
ヘッダファイルの内容は、それを参照するすべてのファイルにコピーされるため、ヘッダファイルにusing宣言がある場合、ヘッダファイルを使用したファイルごとにこの宣言があります.名前が衝突する可能性があります.
 
3.2標準ライブラリタイプstring
(1)stringオブジェクトの定義と初期化
stringオブジェクトを初期化する方法
string s1;//     ,s1     
string s2(s1);//s2 s1   
string s2=s1;// s2(s1)  
string s3("value");//s3    “value”   ,              
string s3="value";//    
string s4(n,'c');// s4     n   c    

2つの初期化方法:
ダイレクトイニシャル
コピー初期化:等号を使用して、コンパイラ等号の右側の初期値を新しいオブジェクトにコピーします.
 
(2)stringオブジェクト上の操作
  • 読み書きstringオブジェクト
  • getlineを使用して1行全体を読み取る
    getline(cin,line)
    読み出された内容をlineオブジェクトに格納し、改行記号
  • は格納.
  • string::size_typeタイプ
  •        size_typeは,標準ライブラリタイプが機械に関係ない特性を体現している.役割ドメインオペレータによる名前size_の表示typeはクラスstringで定義されています
    size関数は、符号なし整数数を返します.記号付き数と混合して使用しないでください.
  • stringオブジェクト
  • を比較する
  • stringオブジェクトに
  • を割り当てる
  • 2 2つのstringオブジェクトを
  • 加算
  • 文字の値とstringオブジェクトの加算
  • stringオブジェクトと文字のフォント値および文字列のフォント値が1つの文に混在して使用される場合、各ウィッグ演算子(+)の両側の演算オブジェクトの少なくとも1つがstringであることを確認する必要があります.
    s1="hello",s2="world!";
    string s6=s1+","+"world";//  
    string s7="hello"+","+s2;//  :          

    練習3.2
    一度に1行全体を読み込み、getline(cin,line)関数を使用します.
    #include 
    #include 
    using namespace std;
    void main()
    {	
    	string mystring;
    	while (getline(cin , mystring))
    	{
    		cout<

    一度に一つの語を読み込む
    #include 
    #include 
    using namespace std;
    void main()
    {	
    	string mystring;
    	while (cin>>mystring)
    	{
    		cout<

    (3)stringオブジェクトの文字の処理
    c++11の新しい標準は、範囲forという文を提供します.
    構文は次のとおりです.
    for(declaration:expression)
        statement

    expressionセクションは、シーケンスを表すオブジェクトです.declarationはシーケンス内のベース要素であり、expressionセクションの次の要素値を反復するたびに初期化します.
     
    範囲for文を使用して文字列の文字を変更する
    stringオブジェクトの文字の値を変更するには、ループ変換を参照タイプとして定義する必要があります.
    文字の一部のみ処理
    2つの方法:1、下付き文字を使用する;2、反復器の使用
     
    3.3標準ライブラリタイプvector
    標準ライブラリタイプvectorは、すべてのオブジェクトのタイプが同じオブジェクトのセットを表します.vectorを使用するには、適切なヘッダファイルを含める必要があります.
    c++言語にはクラステンプレートと関数テンプレートがあり、vectorはクラステンプレートに属します.
    テンプレート自体はクラスや関数ではありません.コンパイラがテンプレートに基づいてクラスまたは関数を作成するプロセスをインスタンス化と呼びます.テンプレートを使用する場合は、コンパイラがクラスまたは関数をどのタイプにインスタンス化すべきかを指定する必要があります.
    テンプレートは一般的なタイプだと理解しています.具体的に使うときは、自分で具体的なデータ型を指定します.
    vectorは、ほとんどのタイプのオブジェクトを要素として収容できます.
    (1)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オブジェクトを初期化し、()ではなく{}を使用します.
    指定された数の要素を作成し、vectorivec(10,-1);
    値初期化はvectorオブジェクトに格納される要素の数のみを提供し、ライブラリは値初期化の要素初期値を作成します.
    (2)vectorオブジェクトへの要素の追加
    範囲for文内で遍歴するシーケンスのサイズを変更するべきではありません
    (3)その他のvector操作
    下付き文字で要素を追加できません
    3.4反復器の紹介
    c++では、forループでより多くの使用が可能!=判断を下す.すべての標準コンテナライブラリが==と!=,ほとんど定義されていません
    反復タイプ
    stringとvectorのsizeを知らないtypeメンバーはいったいどんなタイプなのか、一般的には反復器の正確なタイプも知らない.一般的にiteratorとconst_を使用しますiteratorは反復器のタイプを表します.
    const_iteratorは要素を読むしかなく、要素を書くことができません.vectorオブジェクトとstringオブジェクトが定数の場合はconst_しか使用できませんiterator.
    beginとend、対量は定数でconst_を返しますiterator、非常量はiteratorを返します.
    新しいcbeginを導入し、cendはvectorオブジェクト自体が犬であるか定数であるかにかかわらず、戻り値はconst_である.iterator. 
    参照解除とメンバー・アクセス操作の組み合わせ
    デリファレンス反復は、反復器が指すオブジェクトを取得します.
    (it).Empty()/itを参照解除し、結果オブジェクトのemptyメンバーを呼び出します.
    矢印演算子->解参照とメンバーアクセスの2つの操作を組み合わせます.it->memは*(it)に相当する.mem
    2つの反復器を減算したタイプはdifferenceです.type符号付き整数型.
    3.5配列
    配列はvector構造と似ているが,配列の大きさは固定されており,特定の特殊な応用では性能が優れているが,柔軟性も損なわれている.
    配列宣言形はa[d]のように、dは次元を表し、定数式でなければならない.
    文字配列の特殊な初期化形式で、文字列の文字面値を使用することができます.この方法を使用すると、最後に空の文字があります.
    コピーおよびコピーは許可されていません