Избегайте копирования строки из ostringstreamC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Избегайте копирования строки из ostringstream

Сообщение Anonymous »

У меня есть именованный std::string, который я хочу заполнить данными через интерфейс std::ostream и избежать копирования строки.

Один из способов сделать это, требующее копирования, значит сделать следующее:

Код: Выделить всё

bool f(std::string& out)
{
std::ostringstream ostr;
fillWithData(ostr);
out = ostr.str(); // 2 copies here
return true;
}
Мне нужно передать результат через out, и я не могу вернуть ostr.str().

Я хочу избежать копирования в out = ostr.str();, поскольку эта строка может быть очень большой.

Есть ли какой-нибудь способ, возможно, с использованием rdbuf(), чтобы связать буфер std::ostream непосредственно с выходом ?

Чтобы уточнить, меня интересует поведение автоматического расширения std::string и std::ostream< /code>, чтобы вызывающему абоненту не нужно было знать размер перед call.

ОБНОВЛЕНИЕ: я только что понял, что безобидная строка out = ostr.str();, вероятно, повлечет за собой 2 копий:
  • Первая при вызове str()
  • Другой — оператором присваивания std::string.


Подробнее здесь: https://stackoverflow.com/questions/233 ... ringstream
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»