web-dev-qa-db-ja.com

stringstreamの代わりにstringを使用する必要があるのはいつですか?

string::append()ではなくstringstreamをいつ使用すればよいですか?文字列だけをカテゴライズするとします。

stringstream ss;
ss << str1 << "str2" << ...
Write(ss.str());

または:

string str;
str.reserve(10000);
str.append(str1);
str.append("str2");
...
Write(str);

どちらが速いですか?

29
Lucas Lima

どちらが速いかわかりませんが、推測しなければならない場合、特にreserveメンバー関数を呼び出して拡張用に大きなスペースを割り当てているため、2つ目の例はそうだと思います。

文字列を連結するだけの場合は、string::append(または string::operator+= )を使用します。

数値を文字列表現に変換し、変換中にそれらをフォーマットして、変換結果を一緒に追加する場合は、文字列ストリームを使用します。書式設定が不要な場合、C++ 11は数値型を文字列に変換するために使用できる std::to_string を提供するため、書式設定の部分について明示的に述べます。

19
Praetorian

string.appendははるかに高速です。特にご予約の際は。

文字列のみを連結する場合は、string.appendを使用します。たとえば、非文字列を自動的に文字列に変換する必要がある場合にのみ、stringstreamを使用します。

const int x(42);
stringstream ss;
ss << "My favorite number is: " << x << std::endl;

ここでstringstreamはxを自動的に文字列に変換して追加します。 atoiを呼び出す必要はありません。 Stringstreamはすべての基本型を自動的に変換します。それはその目的に最適です。

また、データを文字列ストリームに送り、後で文字列に変換するだけの場合も同様です。出力用のostringstreamを使用できます。

お役に立てば幸いです。

17
anio