Ovanes, thanks for the explanation and the link. I must admit that I avoided taking closer looks at stream_buf classes, but I will change that now :-) Regards, Roland Ovanes Markarian wrote:
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
mailto:rbock@eudoxos.de> wrote: 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 mailto:Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
------------------------------------------------------------------------
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users