web-dev-qa-db-ja.com

多くの文字列を連結するためのstd :: stringstreamとstd :: string

std::stringstreamの利点の1つは、それがstd::istreamであるため、operator<<からstd::istreamを定義する任意の型からの入力、およびプリミティブ型からの入力を受け入れることができることです。

operator<<は使用しません。代わりに、多くの文字列を連結します。 std::stringstreamの実装により、多くの文字列を連結するためにstd::stringよりも高速になりますか?

33
André Puel

std::stringの追加関数がstringstreamの挿入関数よりも遅いと予想する理由はありません。 std::stringは通常、可能なメモリ割り当て/コピーに加えて、データをメモリにコピーするだけです。 stringstreamは、基本的なwrite呼び出しの場合でも、ロケールなどを処理する必要があります。

また、std::stringは、最初のメモリ割り当て以外のものを最小化または排除する方法を提供します。 reserveの十分なスペースがある場合、すべての挿入はmemcpyにすぎません。 stringstreamではそれは実際には不可能です。

std::stringの追加関数よりも高速であったとしても、stringstreamから文字列をコピーして何かを行うにはhaveです。つまり、これは別の割り当て+コピーであり、std::stringでは必要ありません。少なくともC++ 20は、その特定のニーズを取り除くように設定されているように見えますが。

いくつかの文字列をくっつけるだけでなく、必要に応じてstd::stringstreamを使用する必要がありますformatting

37
Nicol Bolas