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つの方法:
使用する等号の場合はコピー初期化、その他は直接初期化です.当初の初期値が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オブジェクトがあると理解できるが、実際に判断する必要がある)
s 2は結合法則によって
したがって、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文.
下付き文字下付き演算子([]).注意下書きを使うときは必ず溢れないように注意してください.すなわち、下の値は0より大きく、文字列のsize()より小さくなければならない.
標準ライブラリ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に等しい
注意:カッコ優先リストの初期化は、リストの初期化ができない場合は直接初期化(カッコ類似)に変わり、カッコは直接初期化になります.
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種
2.反復演算
iter + n
n位置を前方に移動する反復器を返します
iter - n
n位置を後方に移動する反復器を返します
iter += n
iterをn位置後ろに移動
iter -=n
iter前方移動n位置
iter1 - iter2
両者の距離を取得します.タイプはdeifferent_です.type
>、=、<=
演算に関与する反復器は同じコンテナでなければなりません
はいれつ
vectorのようなデータ構造ですが、サイズが固定されているため、特定のプログラムではパフォーマンスが向上しますが、柔軟な行は悪くなります.
1.組み込み配列の定義と初期化
配列のサイズは固定されているため、初期化時に次元は定数式でなければなりません.
配列を定義するときは配列タイプを指定する必要があります.autoを使用してタイプを取得することはできません.
また、配列はオブジェクトではないため、配列の参照は存在しません.
初期化配列を表示
リストの初期化時に次元を無視できます.コンパイラはリスト要素に基づいて配列次元を推定します.
次元が指定されている場合、初期化時に要素の個数は配列次元より大きくないでください.より小さい場合、配列の前の要素が初期化されます.残りの要素はデフォルトで初期化されます.
文字配列の特殊性
文字列のフォント値を使用して文字配列を初期化する場合は、文字列のフォント値に空の文字があることに注意してください.だから長さがこぼれないように注意します.
割り当てとコピーは許可されていません
配列は、別の配列に値を割り当てることはできません.ただし、配列の値で他の配列を初期化できます.
複雑な配列の宣言の理解
配列の宣言は内側から外側に見ることができます.
2.配列要素へのアクセス
下付き文字を使用します.
3.ポインタと配列
配列名は、配列の最初の要素を指すポインタを表します.
したがってautoを使用して配列名を作用させると、ポインタタイプが得られます.decltypeでは上記の遷移は発生しません.
ポインタが配列内の要素を指す限り、下付きスケール演算を実行でき、下付きスケール値はint(負数)
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.多次元配列
配列と同様に、各配列を表す要素は、次の配列サイズを含む配列です.針も.
ネーミングスペース
標準ライブラリ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比較:
文字列と文字面値の加算は、両文字列の文字面値が加算できないことに注意する(+番号の両側に少なくとも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.多次元配列
配列と同様に、各配列を表す要素は、次の配列サイズを含む配列です.針も.