How to insert a string to the beginning of a stringstream
21,239
Solution 1
You cannot do it without making at least one copy. One way:
std::stringstream ss;
ss << " world!";
const std::string &temp = ss.str();
ss.seekp(0);
ss << "Hello";
ss << temp;
This relies on the "most important const
" to extend the lifetime of the temporary and avoid making an extra copy.
Or, simpler and possibly faster:
std::stringstream ss;
ss << " world!";
std::stringstream temp;
temp << "Hello";
temp << ss.rdbuf();
ss = std::move(temp); // or ss.swap(temp);
This borrows the rdbuf
approach from this answer, since the interesting problem here is how to minimize copies.
Solution 2
the only way i can see is to create the string from stream and prefix your other string
string result = hello + ss.str();
its called a stream for a reason.
Author by
dlsou
Updated on November 25, 2020Comments
-
dlsou over 3 years
For example only and not the actual code:
stringstream ss; ss << " world!"; string hello("Hello"); // insert hello to beginning of ss ??
Thanks for all the responses, I also found this code, which works:
ostringstream& insert( ostringstream& oss, const string& s ) { streamsize pos = oss.tellp(); oss.str( s + oss.str() ); oss.seekp( pos + s.length() ); return oss; }