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
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