32

stringstreamの代わりにいつ使用する必要がありstring::append()ますか? 文字列だけを連結するとします。

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

または:

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

どちらが速いですか?

4

2 に答える 2

25

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

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

数値を文字列表現に変換し、変換中に書式を設定し、変換結果を一緒に追加する場合は、stringstreams を使用します。書式設定が必要ない場合は、C++ 11 をstd::to_string使用して数値型を文字列に変換できるため、書式設定部分について明示的に言及します。

于 2012-08-25T03:26:20.660 に答える
20

string.append ははるかに高速です。特に予約時。

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

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

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

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

それが役立つことを願っています。

于 2012-08-25T03:25:02.123 に答える