@vipermagi
Вечный ученик.

Как взять данные stringstream без копирования?

Есть задача: взять данные из файла или конвейера pipe и на их основе сделать нечто новое, например заархивировать или составить из нескольких строк большую строку.
Пользую для буфера тип stringstream. Но вот не задача, через метод str() он возвращает копию своего внутреннего поля. А я рассчитывал получить rvalue этой строки, чтобы одно полное копирование обойти; то есть мне нужно сознательно старый stringstream сделать не валидным.

Как вообще лучше в таком случае поступить?
  • Вопрос задан
  • 223 просмотра
Пригласить эксперта
Ответы на вопрос 2
@MiiNiPaa
Если нужно только чтение, то можно использовать istreambuf_iterator.
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
stringstream не обязан хранить данные в строке. Так что функция str() просто собирает информацию в строку.

https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++...

Судя по исходникам G++, их sstream хранит информацию в длинном буфере, но не в строке. Но и это не обязательно; буферов может быть много.

Так что, к сожалению, для экономии памяти придётся делать свой велосипед. Правда, как говорит MiiNiPaa, некоторые задачи удастся выполнить и на stringstream’е, воспользовавшись, например, итератором.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы