stringstream
の代わりにいつ使用する必要がありstring::append()
ますか? 文字列だけを連結するとします。
stringstream ss;
ss << str1 << "str2" << ...
Write(ss.str());
または:
string str;
str.reserve(10000);
str.append(str1);
str.append("str2");
...
Write(str);
どちらが速いですか?
stringstream
の代わりにいつ使用する必要がありstring::append()
ますか? 文字列だけを連結するとします。
stringstream ss;
ss << str1 << "str2" << ...
Write(ss.str());
または:
string str;
str.reserve(10000);
str.append(str1);
str.append("str2");
...
Write(str);
どちらが速いですか?
どちらが高速になるかはわかりませんが、推測する必要がある場合は、特にreserve
メンバー関数を呼び出して拡張用に大きなスペースを割り当てたので、2番目の例だと思います。
文字列を連結するだけの場合は、string::append
(またはstring::operator+=
) を使用します。
数値を文字列表現に変換し、変換中に書式を設定し、変換結果を一緒に追加する場合は、stringstreams を使用します。書式設定が必要ない場合は、C++ 11 をstd::to_string
使用して数値型を文字列に変換できるため、書式設定部分について明示的に言及します。
string.append ははるかに高速です。特に予約時。
文字列のみを連結する場合は、string.append を使用します。たとえば、非文字列を文字列に自動的に変換する必要がある場合にのみ、stringstream を使用します。
const int x(42);
stringstream ss;
ss << "My favorite number is: " << x << std::endl;
ここで、stringstream は自動的に x を文字列に変換して追加します。atoi を呼び出す必要はありません。Stringstream は、すべての基本型を自動的に変換します。その目的には素晴らしいです。
また、後で文字列に変換するためにデータを文字列ストリームに送信するだけの場合も同様です。出力用の ostringstream を使用できます。
それが役立つことを願っています。