Как вставить строку в начало потока строки - PullRequest
5 голосов
/ 28 октября 2011

Только для примера, а не фактический код:

stringstream ss;
ss << " world!";

string hello("Hello");

// insert hello to beginning of ss ??

Спасибо за все ответы, я также нашел этот код, который работает:

ostringstream& insert( ostringstream& oss, const string& s )
{
  streamsize pos = oss.tellp();
  oss.str( s + oss.str() );
  oss.seekp( pos + s.length() );
  return oss;
}

Ответы [ 3 ]

5 голосов
/ 28 октября 2011

Вы не можете сделать это, не сделав хотя бы одну копию. В одну сторону:

std::stringstream ss;
ss << " world!";

const std::string &temp = ss.str();
ss.seekp(0);
ss << "Hello";
ss << temp;

Это полагается на "самый важный const", чтобы продлить срок службы временного и избежать создания дополнительной копии.

Или, проще и, возможно, быстрее:

std::stringstream ss;
ss << " world!";

std::stringstream temp;
temp << "Hello";
temp << ss.rdbuf();
ss = std::move(temp); // or ss.swap(temp);

Это заимствует подход rdbuf от этого ответа , поскольку интересная проблема заключается в том, как минимизировать копии.

1 голос
/ 28 октября 2011

Единственный способ, который я вижу, - создать строку из потока и добавить префикс к другой строке

string result = hello + ss.str();

это вызвано потоком по причине.

0 голосов
/ 28 октября 2011

Предполагая, ss1 содержит "привет"

ss1 << ss.rdbuf();

или

ss1 << "hello" << ss;

Для получения дополнительной информации см. Этот URL: -

stringstream

...