C 文字列操作 新しいページはコチラ
提供: yonewiki
(→文字列の検索と置換) |
(→文字列の検索と置換) |
||
4,064行: | 4,064行: | ||
− | 169行目のtypedef関数は宣言を置き換えるための命令文になります。std::pair<int32_t,int32_t> | + | 169行目のtypedef関数は宣言を置き換えるための命令文になります。std::pair<int32_t,int32_t>という構造体定義をrange_typeに置き換えるということを意味しています。 |
− | またpairの後ろにある<int32_t,int32_t> | + | またpairの後ろにある<int32_t,int32_t>というのはpairという構造体がテンプレート構造体として準備されていて、二つの型名を引数にとる必要がありここではint32_tという型を2つ指定して、pairというテンプレート構造体で使う2つの型はどちらもint型で使いますというテンプレート構造体の利用方法を記述している部分になります。pair構造体は2つの変数を対にして記憶するための構造体になっています。 |
− | 170行目のvectorという関数もテンプレートクラスになっていて、要するにstd::vector< std::pair<int32_t,int32_t> >という宣言をしたのと同じことで、vectorクラスはstd::pair<int32_t,int32_t>という型で使いますという準備をした上でその変数として、matchesというものを使うという定義になります。vecotrは動的にメモリを確保するのを支援してくれるクラスで、push_backという関数の引数にstd::pair<int32_t,int32_t>(int型の数値,int型の数値) | + | 170行目のvectorという関数もテンプレートクラスになっていて、要するにstd::vector< std::pair<int32_t,int32_t> >という宣言をしたのと同じことで、vectorクラスはstd::pair<int32_t,int32_t>という型で使いますという準備をした上でその変数として、matchesというものを使うという定義になります。vecotrは動的にメモリを確保するのを支援してくれるクラスで、push_backという関数の引数にstd::pair<int32_t,int32_t>(int型の数値,int型の数値)という構造体が持つコンストラクタによって返されるpair構造体型のポインタを記録しています。引数には検索した文字の開始位置と終了位置を入れています。vectorのbackという関数で最後に格納したポインタを返してくれるので、range_typeつまりstd::pair<int32_t,int32_t>型のrangeというポインタ変数にコピーしています。std::pairのメンバ変数firstにコンストラクタで使用した一つ目引数の数値が取得でき、メンバ変数secondで二つ目の引数の数値が取得できます。vecotorクラスのpop_back()という関数の呼び出しによって最後に格納したポインタを消すという処理をしてくれます。こうやってfind()で検索するすべての検索位置をvectorクラスの中にpair構造体でセットした2つのint型整数で検索された文字の開始位置と終了位置を記憶する仕組みです。テンプレートクラスやテンプレート構造体やクラスについて理解する必要があります。vectorのempty()関数は格納されたものが無くなったらtrueを返す関数で、while文のループ条件として!matches.empty()のようにして、空っぽではないあいだ繰り返すという処理になっています。 |
− | 部分一致の処理は難しいので、typedef関数とクラスとクラス | + | 部分一致の処理は難しいので、typedef関数とクラスとクラス 構造体のコンストラクタとテンプレートクラスとクラスのメンバ関数およびクラスのメンバ変数、更には標準クラスであるvectorクラスとpair構造体について理解してから戻ってくるとよいかもしれません。 |
=='''文字列ファイルパス操作'''== | =='''文字列ファイルパス操作'''== |