string::append()
ではなくstringstream
をいつ使用すればよいですか?文字列だけをカテゴライズするとします。
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+=
)を使用します。
数値を文字列表現に変換し、変換中にそれらをフォーマットして、変換結果を一緒に追加する場合は、文字列ストリームを使用します。書式設定が不要な場合、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を使用できます。
お役に立てば幸いです。