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
ヘッダファイル:
初期化string
cctypeヘッダファイルの関数
違いは、等号の実際に実行されるのはコピー初期化であり、等号を使用しないのは直接初期化である.
stringクラスのメンバー関数
string読み出し
読み取り時にstringオブジェクトは、先頭の空白(スペース、改行、タブ)を自動的に無視し、次の空白に遭遇するまで最初の本当の文字から読み始めます.
getline行全体を読み込む
getlineは入力時の空白文字を保持できます.getlineのパラメータは入力ストリームとstringオブジェクトです.改行に遭遇するまで(改行も読み込まれました).getlineはストリームパラメータを返します.
cstringヘッダファイルでは、cstringはC意味ヘッダファイルstringである.hのC++バージョン.
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によって変数のタイプを推定することを許可する
stringのインデックス
stringオブジェクトにアクセスする単一文字の2つの方法:下付き文字と反復器
1下付き演算子
受け取ったのはstring::size_typeタイプの値.
2反復
標準ライブラリvector
ヘッダファイル
vectorオブジェクトの初期化
通常、vectorオブジェクトに格納される要素の数だけを初期値を省略することなく指定できます.ライブラリには、値が初期化された要素の初期値が作成されます.ベクトルサイズ
vector操作
s.begin()およびs.end()関数は、反復器の初期値としてよく使用されます.
反復器
反復演算子
反復器のタイプ
反復器の操作
stringとvectorの要素は連続したメモリ空間に保存されるため、ランダムアクセスが速い.ただし、エレメントの中間追加と削除には時間がかかります.また、要素を追加するには、追加のストレージ領域を割り当てる必要がある場合があります.この場合、各要素は新しいストレージ領域に移動する必要があります.
リストとforward_Listの目的は、コンテナの任意の場所での追加と削除操作を迅速にすることです.代わりに、この2つのコンテナはランダムアクセスをサポートしません.
dequeはランダムアクセスをサポートし、削除要素を中間に追加するコストが高い.しかし、両端に要素を追加および削除するのは速いです.
反復範囲
1つの反復範囲は、1対の反復で表され、それぞれ先頭要素と末尾要素を指します.すなわちbeginとendです.2番目の反復器は、範囲内の最後の要素を指さすことはありません.左閉じ右開き
beginとendが等しい場合、範囲は空です.
文書ディレクトリ
ヘッダファイル:
#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が等しい場合、範囲は空です.