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.

Share:
21,239
dlsou
Author by

dlsou

Updated on November 25, 2020

Comments

  • dlsou
    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;
    }