Roland that's not the fastest way with some other reagards, because
stringstream as all iostream classes are designed to deal with thread safe
apps and call lock/unlock pairs for _every_ character inserted. This
operation is done by constructing the ostream::sentry guard. To be more
efficient write your output to stream_buf classes.
try adapting this example to your needs:
http://codepad.org/ujfeLB72
When I did some tests, this brought me performance factor of 3 or 4 over
common iostream.
With Kind Regards,
Ovanes
On Fri, Feb 27, 2009 at 6:46 PM, Roland Bock
Hi,
I have a program which produces a vector of integers (several million entries). I need to write that into a human-readable string of space separated numbers.
I wonder, what would be the fastest way?
My first attempt was
stringstream resultStream; copy(integers.begin(), integers.end(), ostream_iterator<int>(resultStream, " ")); string result = resultStream.str();
But that requires copying the string.
Thus I was wondering if I could use boost to write to the target string directly?
boost::iostreams allow me to do the following:
string result; boost::iostreams::filtering_ostream out(boost::iostreams::back_inserter(result)); copy(integers.begin(), integers.end(), ostream_iterator<uint64>(out, " "));
This is faster by almost a factor of 2.
Any ideas how to increase speed even more?
Thanks in advance,
Roland _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users