C++学習ノート(3)
8628 ワード
文字列、ベクトル、配列
ネーミングスペースのusing宣言
using宣言の形式:
各名前に独立したusing宣言ヘッダファイルが必要です.using宣言は含まれません.
標準ライブラリタイプstring
stringタイプを使用するには、まずstringヘッダファイルを含める必要があります.
stringオブジェクトの定義と初期化
変数を等号(=)で初期化し、実際にはコピー初期化を実行します.コンパイラは等号の右側の初期値を新しく作成したオブジェクトにコピーします.等号を使用しない場合は、複数の値を直接初期化して、コピー初期化する方法を実行します.
stringオブジェクト上の操作
読み取り操作を実行すると、stringオブジェクトは先頭の空白(スペース、改行、タブなど)を自動的に無視し、次の空白に出会うまで最初の真の文字から読み始めます.
getlineを使用して行全体を読み込む
最終的に得られた文字列に入力時の空白文字を保持させ、パラメータは1つの入力ストリームと1つのstringオブジェクトであり、与えられた入力ストリームから内容を読み込み、改行文字に遭遇するまで改行文字も読み込まれ、そのstringオブジェクトに格納されるが、最終的な改行文字は実際に破棄され、得られたstringオブジェクトには改行文字は含まれていません
stringのemptyとsize操作
empty関数はstringオブジェクトが空であるかどうかに基づいて対応するブール値を返し、ポイントオペレータを使用してどのオブジェクトがempty関数size関数を実行してstringオブジェクトの長さを返すかを指定します.
string::size_typeタイプ
size関数はstring::size_を返します.typeタイプの値は、シンボルタイプのない値であり、stringオブジェクトのサイズを任意に置くことができます.stringクラスを格納するためのsize関数が値を返す変数は、string::size_である必要があります.typeタイプ
stringオブジェクトの比較
1、2つのstringオブジェクトの長さが異なり、stringオブジェクトの各文字が長いstringオブジェクトの対応する位置の文字と同じである場合、短いstringオブジェクトは長いstringオブジェクトより小さいと言います.2、2つのstringオブジェクトがいくつかの対応する位置でしばらくしない場合、stringオブジェクトの比較の結果はstringオブジェクトの最初の異なる文字の比較の結果である.
stringオブジェクトに値を割り当てる
オブジェクトの値を別のオブジェクトに割り当てることができます.
2つのstringオブジェクトを加算
文字値とstringオブジェクトの加算
stringオブジェクトと文字のフォント値および文字列のフォント値を1つの文に混ぜて使用する場合は、加算演算子(+)の両側の演算オブジェクトの少なくとも1つがstringであることを確認する必要があります.
stringオブジェクトの文字の処理
cctypeヘッダファイルに標準ライブラリ関数のセットが定義されています
範囲for(range for)文
構文の形式は次のとおりです.
ここで、expressionセクションは、シーケンスを識別するオブジェクトです.declarationセクションでは、シーケンス内のベース要素にアクセスするために使用される変数を定義します.反復するたびにdeclarationセクションの変数はexpressionセクションの次の要素値に初期化され、その値を変更するにはdeclarationを参照タイプとして定義する必要があります.
標準ライブラリタイプvector
オブジェクトの集合を表します.すべてのオブジェクトタイプが同じで、各オブジェクトには対応するインデックスがあり、インデックスはオブジェクトにアクセスして宣言します.
vectorはクラステンプレートで、コンパイラがテンプレートに基づいてクラスまたは関数を作成するプロセスをインスタンス化と呼びます.テンプレートを使用する場合、コンパイラがクラスまたは関数をどのようなタイプにインスタンス化すべきかを指摘する必要があります.
vectorオブジェクトの定義と初期化
vectorオブジェクトへの要素の追加
push_backは、vectorオブジェクトの末尾要素として値を「押す」vectorオブジェクトの末尾要素として使用します.下付き文字で追加することはできません.
その他のvector操作
size_の使用typeは、まずどのタイプが定義されているかを指定する必要があります.vectorオブジェクトのタイプには常に要素のタイプが含まれています.
反復器
反復の使用
反復器を取得するにはアドレス記号を使用しません.反復器のタイプがあり、反復器を返すメンバーbeginメンバーが、最初の要素(または最初の文字)を指す反復器endメンバーを返す反復器を返します.反復器は、コンテナの「テール要素の次の位置」を返す後続反復器またはテール反復器と呼ばれます.の反復器コンテナが空の場合、beginとendは同じ反復器を返します.いずれも後続の反復器beginとendが返す具体的なタイプはオブジェクトが定数であるかどうかによって決まります.オブジェクトが定数の場合、beginとendはconst_を返します.iterator; オブジェクトが定数でない場合、戻りiteratorは範囲forループの間にvectorオブジェクトに要素を追加できません.vectorオブジェクトの容量を変更する可能性のある操作は、そのvectorオブジェクトの反復器を無効にします.
反復演算子
反復器を1つの要素から別の要素に移動
増分(+)演算子を使用して、ある要素から次の要素endに移動して返される反復器は、実際に要素を示すものではないので、増分または解参照操作はできません.
反復タイプ
反復演算
距離とは、右側の反復器がどれだけ前に移動するかで左側に追いつく反復器のことで、differenceという名前のものです.typeの符号付き整数数
はいれつ
組み込み配列の定義と初期化
配列の内容を他の配列にコピーして初期値にすることはできません.また、配列に他の配列を割り当てることはできません.配列の下付き文字を使用する場合、通常はsize_と定義されます.tタイプ、cstddefヘッダファイルで定義
配列とポインタ
多くの場合、コンパイラは配列名を使用する場所で、配列の先頭要素を指すポインタに自動的に置き換えられます.配列をauto変数の初期値として使用すると、配列がdecltypeキーを使用していたときにポインタに変換されるのではなく、ポインタが推定されます.配列に戻るポインタ演算には、解参照、増分、比較、整数加算、2つのポインタの減算など、1つのポインタに整数値を加算(減算)した場合も、ポインタの2つのポインタの減算結果はそれらの間の距離です.タイプはptrdift_tという標準ライブラリタイプで、cstddefヘッダファイルに定義されています.2つのポインタがそれぞれ関連しないオブジェクトを指している場合は、比較できません.
配列を使用してvectorオブジェクトを初期化するには
たじゅうはいれつ
1つの配列の要素が配列である場合、通常は2つの次元を使用して定義されます.1つの次元は配列自体のサイズを表し、別の次元は要素を表します(配列でもあります)サイズカッコで囲まれた値のセットを使用して多次元配列を初期化できます.多次元配列を初期化する場合、すべての要素の値が初期化リストに含まれる必要はありません.range forを使用する場合、最外層のループ制御変数を参照タイプに設定するには、参照を使用しないとポインタに劣化し、外層ループステップエラープログラムは多次元数を使用します.グループ名は、配列の先頭要素へのポインタに自動的に変換されます.
ネーミングスペースのusing宣言
using宣言の形式:
using namespace::name;
各名前に独立したusing宣言ヘッダファイルが必要です.using宣言は含まれません.
標準ライブラリタイプstring
stringタイプを使用するには、まずstringヘッダファイルを含める必要があります.
#include
using std::string;
stringオブジェクトの定義と初期化
string s1 ,s1
string s2(s1) s2 s1
string s2 = s1 s2(s1), s2 s1
string s3("value") s3 "value" ,
string s3 = "value" s3("value"), s3 "value"
string s4(n, 'c') s4 n c
変数を等号(=)で初期化し、実際にはコピー初期化を実行します.コンパイラは等号の右側の初期値を新しく作成したオブジェクトにコピーします.等号を使用しない場合は、複数の値を直接初期化して、コピー初期化する方法を実行します.
string s1 = string(10, 'c');
stringオブジェクト上の操作
os << s s os , os
is >> s is s, , is
getline(is, s) is s, is
s.empty() s true, false
s.size() s
s(n) s n , n 0
s1 + s2 s1 s2
s1 = s2 s2 s1
s1 == s2 s1 s2 , ; string
s1 != s2
, >= , ‘’
読み取り操作を実行すると、stringオブジェクトは先頭の空白(スペース、改行、タブなど)を自動的に無視し、次の空白に出会うまで最初の真の文字から読み始めます.
getlineを使用して行全体を読み込む
最終的に得られた文字列に入力時の空白文字を保持させ、パラメータは1つの入力ストリームと1つのstringオブジェクトであり、与えられた入力ストリームから内容を読み込み、改行文字に遭遇するまで改行文字も読み込まれ、そのstringオブジェクトに格納されるが、最終的な改行文字は実際に破棄され、得られたstringオブジェクトには改行文字は含まれていません
stringのemptyとsize操作
empty関数はstringオブジェクトが空であるかどうかに基づいて対応するブール値を返し、ポイントオペレータを使用してどのオブジェクトがempty関数size関数を実行してstringオブジェクトの長さを返すかを指定します.
string::size_typeタイプ
size関数はstring::size_を返します.typeタイプの値は、シンボルタイプのない値であり、stringオブジェクトのサイズを任意に置くことができます.stringクラスを格納するためのsize関数が値を返す変数は、string::size_である必要があります.typeタイプ
stringオブジェクトの比較
1、2つのstringオブジェクトの長さが異なり、stringオブジェクトの各文字が長いstringオブジェクトの対応する位置の文字と同じである場合、短いstringオブジェクトは長いstringオブジェクトより小さいと言います.2、2つのstringオブジェクトがいくつかの対応する位置でしばらくしない場合、stringオブジェクトの比較の結果はstringオブジェクトの最初の異なる文字の比較の結果である.
stringオブジェクトに値を割り当てる
オブジェクトの値を別のオブジェクトに割り当てることができます.
string s1(10, 'e'), s2;
s2 = s1;
2つのstringオブジェクトを加算
string s1 = "hello", s2 = "world
";
string s3 = s1 + s2;
s1 += s2;
文字値とstringオブジェクトの加算
stringオブジェクトと文字のフォント値および文字列のフォント値を1つの文に混ぜて使用する場合は、加算演算子(+)の両側の演算オブジェクトの少なくとも1つがstringであることを確認する必要があります.
stringオブジェクトの文字の処理
cctypeヘッダファイルに標準ライブラリ関数のセットが定義されています
isalnum(c) c
isalpha(c) c
iscntrl(c) c
isdigit(c) c
isgraph(c) c
islower(c) c
isprint(c) c ( c c )
ispunct(c) c ( c 、 、 、 )
isspace(c) c ( c 、 、 、 、 、 )
isupper(c) c
isxdigit(c) c
tolower(c) c , ; c
toupper(c) c , ; c
範囲for(range for)文
構文の形式は次のとおりです.
for(declaration : expression)
statement
ここで、expressionセクションは、シーケンスを識別するオブジェクトです.declarationセクションでは、シーケンス内のベース要素にアクセスするために使用される変数を定義します.反復するたびにdeclarationセクションの変数はexpressionセクションの次の要素値に初期化され、その値を変更するにはdeclarationを参照タイプとして定義する必要があります.
標準ライブラリタイプvector
オブジェクトの集合を表します.すべてのオブジェクトタイプが同じで、各オブジェクトには対応するインデックスがあり、インデックスはオブジェクトにアクセスして宣言します.
#include
using std::vector;
vectorはクラステンプレートで、コンパイラがテンプレートに基づいてクラスまたは関数を作成するプロセスをインスタンス化と呼びます.テンプレートを使用する場合、コンパイラがクラスまたは関数をどのようなタイプにインスタンス化すべきかを指摘する必要があります.
vectorオブジェクトの定義と初期化
vector v1 v1 vector, T ,
vector v2(v1) v2 v1
vector v2 = v1 v2(v1),v2 v1
vector v3(n, val) v3 n , val
vector v4(n) v4 n
vector v5{a,b,c,......} v5 ,
vector v5 = {a,b,c,......} v5{a,b,c,......}
vectorオブジェクトへの要素の追加
push_backは、vectorオブジェクトの末尾要素として値を「押す」vectorオブジェクトの末尾要素として使用します.下付き文字で追加することはできません.
その他のvector操作
v.empty() v , ;
v.size() v
v.push_back() v t
v[n] v n
v1 = v2 v2 v1
v1 = {a,b,c,......} v1
v1 == v2 v1 v2
v1 != v2
, >= ,
size_の使用typeは、まずどのタイプが定義されているかを指定する必要があります.vectorオブジェクトのタイプには常に要素のタイプが含まれています.
vector::size_type //
vector::size_type //
反復器
反復の使用
反復器を取得するにはアドレス記号を使用しません.反復器のタイプがあり、反復器を返すメンバーbeginメンバーが、最初の要素(または最初の文字)を指す反復器endメンバーを返す反復器を返します.反復器は、コンテナの「テール要素の次の位置」を返す後続反復器またはテール反復器と呼ばれます.の反復器コンテナが空の場合、beginとendは同じ反復器を返します.いずれも後続の反復器beginとendが返す具体的なタイプはオブジェクトが定数であるかどうかによって決まります.オブジェクトが定数の場合、beginとendはconst_を返します.iterator; オブジェクトが定数でない場合、戻りiteratorは範囲forループの間にvectorオブジェクトに要素を追加できません.vectorオブジェクトの容量を変更する可能性のある操作は、そのvectorオブジェクトの反復器を無効にします.
反復演算子
*iter // iter
iter->mem // iter mem , (*iter).mem
++iter // iter
--iter // iter
iter1 == iter2 // ( ),
iter1 != iter2 // , ; ,
反復器を1つの要素から別の要素に移動
増分(+)演算子を使用して、ある要素から次の要素endに移動して返される反復器は、実際に要素を示すものではないので、増分または解参照操作はできません.
反復タイプ
vector::iterator it; //it vector
string::iterator it2; //it2 string
vector::const_iterator it3; //it3 ,
string::const_iterator it4; //it4 ,
反復演算
iter + n , 。
,
iter - n , 。
,
iter1 += n , iter1 n iter1
iter1 -= n , iter1 n iter1
iter1 - iter2 , ,
。
>, >=,
距離とは、右側の反復器がどれだけ前に移動するかで左側に追いつく反復器のことで、differenceという名前のものです.typeの符号付き整数数
はいれつ
組み込み配列の定義と初期化
const unsigned sz = 3;
int ial[sz] = {0, 1, 2}; // 3 , 0,1,2
int a2[] = {0, 1, 2}; // 3
int a3[5] = {0, 1, 2}; // a3[] = {0, 1, 2, 0, 0}
string a4[3] = {"hi", "bye"}; // a4[] = {"hi", "bye", ""}
int a5[2] = {0, 1, 2}; // :
配列の内容を他の配列にコピーして初期値にすることはできません.また、配列に他の配列を割り当てることはできません.配列の下付き文字を使用する場合、通常はsize_と定義されます.tタイプ、cstddefヘッダファイルで定義
配列とポインタ
多くの場合、コンパイラは配列名を使用する場所で、配列の先頭要素を指すポインタに自動的に置き換えられます.配列をauto変数の初期値として使用すると、配列がdecltypeキーを使用していたときにポインタに変換されるのではなく、ポインタが推定されます.配列に戻るポインタ演算には、解参照、増分、比較、整数加算、2つのポインタの減算など、1つのポインタに整数値を加算(減算)した場合も、ポインタの2つのポインタの減算結果はそれらの間の距離です.タイプはptrdift_tという標準ライブラリタイプで、cstddefヘッダファイルに定義されています.2つのポインタがそれぞれ関連しないオブジェクトを指している場合は、比較できません.
配列を使用してvectorオブジェクトを初期化するには
int int_arr[] = {0, 1, 2, 3, 4, 5};
vector ivec(begin(int_arr), end(int_arr));
たじゅうはいれつ
1つの配列の要素が配列である場合、通常は2つの次元を使用して定義されます.1つの次元は配列自体のサイズを表し、別の次元は要素を表します(配列でもあります)サイズカッコで囲まれた値のセットを使用して多次元配列を初期化できます.多次元配列を初期化する場合、すべての要素の値が初期化リストに含まれる必要はありません.range forを使用する場合、最外層のループ制御変数を参照タイプに設定するには、参照を使用しないとポインタに劣化し、外層ループステップエラープログラムは多次元数を使用します.グループ名は、配列の先頭要素へのポインタに自動的に変換されます.