トークナイザーのようなものを書いています。boost::string_ref
「トークン値」を返すために使用したいと思います。string_ref を char ごとに読み込んでから、値を含む部分文字列を返したいと思います。
非常に最小限の例を見てみましょう。
string test = "testing string";
boost::string_ref rtest(test);
//-------- and now we can go this way --------
auto begin = rtest.begin();
auto end = rtest.end();
for(/*something*/){
process_char(*end); // print char
end ++;
}
// how to return rtest(begin,end)?
// -------- or this way --------
int begin = 0;
int end = 0;
for(/*something*/){
process_char(rtest[end]);
end++;
}
return rtest.substr(begin, end);
コードでは、文字列を反復処理する 2 つの方法が示されています: ポインターを使用する方法と int を使用する方法です。ポインターの方法は優れていますが、ポインター間で戻る方法はなくboost::string_ref.substr
、2 番目のメソッドは int を使用し、int はいくつかの数値を処理できますが、これは大きな入力ファイルでは小さすぎる可能性があります。
では、大きな入力に対してこの方法を反復することは可能ですか?