Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить/назначить внутренний буфер stringstream`а 
V
    Опции темы
boostcoder
Дата 4.5.2011, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



всем доброго дня.

если я все правильно понял, то назначить внутренний буфер ostringstream`у можно так:
Код

#include <iostream>
#include <sstream>

int main() {
   char buf[32] = {0};
   std::ostringstream os;
   os.rdbuf()->pubsetbuf(buf, sizeof(buf));
   
   os << "test string" << std::endl;
   
   std::cout << buf;
}

http://liveworkspace.org/code/50053b3bf031...ae453e1ab76dde9

но я абсолютно не понял, как можно получить сырой указатель на внутренний буфер ostringstream`а. для того, чтоб его можно было назначить istringstream`у без промежуточного копирования в строку.
подскажите кто в курсе.

спасибо.

Добавлено @ 17:27
метод str() не предлагать.
цель именно в том, чтоб избавиться от клонирования внутреннего буфера.


Это сообщение отредактировал(а) boostcoder - 4.5.2011, 17:37
PM WWW   Вверх
boostcoder
Дата 4.5.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



нашел только это: pbase() - начало массива.
но он protected. придется наследоваться :(

и еще, не нашел возможности узнать размер внутреннего буфера.
есть такие методы, но тоже protected.
epptr() - конец массива.
pptr() - указатель на текущую позицию.

походу, предполагалось, что вычислять размер внутреннего буфера будут при помощи epptr() - pbase()

PM WWW   Вверх
boostcoder
Дата 4.5.2011, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



так и сделал.
всем спасибо.

PM WWW   Вверх
mes
Дата 4.5.2011, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



цели не понял, но.. 
случайно ли не stringstream нужен ?
мне почему то кажется, что его не заметили...  smile 



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.5.2011, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  4.5.2011,  19:06 Найти цитируемый пост)
цели не понял

проблема в том, что метод str() возвращает копию. к примеру, в ostringstream записали 2.735 Гб. теперь, для того чтоб передать данные другой программе, их нужно получить у ostringstream`а. и вот тут выделяется еще 2.735 Гб.


Это сообщение отредактировал(а) boostcoder - 4.5.2011, 19:59
PM WWW   Вверх
Earnest
Дата 4.5.2011, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Я в таких случаях использую не ostringstream, а ostrstream. Функции называются так же, но str возвращает указатель + pcount и что еще надо, чтобы передать данные куда угодно, не копируя... При этом буфер замораживается для дальнейшей записи, но это вряд ли проблема в данном контексте... тем более, что после использования, можно и отморозить.


--------------------
...
PM   Вверх
boostcoder
Дата 4.5.2011, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Earnest @  4.5.2011,  20:30 Найти цитируемый пост)
ostrstream

это что?
в доке такого нет: http://cplusplus.com/reference/iostream/

smile

PM WWW   Вверх
mes
Дата 4.5.2011, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.5.2011,  19:56 Найти цитируемый пост)
это что?

оно deprecated.. находится в <strstream> и работает с указателями а не строками... 
 smile 


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.5.2011, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  4.5.2011,  23:41 Найти цитируемый пост)
оно deprecated

оно что, deprecated с самого выхода стандарта 2003го года?)
PM WWW   Вверх
mes
Дата 5.5.2011, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.5.2011,  22:52 Найти цитируемый пост)
оно что, deprecated с самого выхода стандарта 2003го года?) 

 smile  smile

Цитата

 Annex D [depr]
 (normative) 
 Compatibility features

...
2 These are deprecated features, where deprecated is defined as: Normative for the current edition of the
Standard, but not guaranteed to be part of the Standard in future revisions.
...
D.7 char* streams
D.7.1 Class strstreambuf


Это сообщение отредактировал(а) mes - 5.5.2011, 00:11


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 5.5.2011, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



странно.. нужный класс вроде бы..
PM WWW   Вверх
Earnest
Дата 5.5.2011, 06:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Надо же... а мои компиляторы MS 2003 и 2008 не подозревают о том, что оно deprecated... И я, соответственно... smile 
Хотя, смутно помню вроде, что при переносе проекта под 2008 какая-та ругань была, и я в настройках что-то подкручивала - в проекте миллион всяких ptintf и прочих строковых C-функций, которые нынче тоже считаются вредными.

Я этими классами (strstream, istrstream, ostrstream) пользуюсь давно, считаю их очень удобными для всякого рода сериализации, а stringstrrem'ы наоборот - в том числе и по той причине, что назвал boostcoder.

Странно, с чего бы вдруг их опустили. Что-то сильно стал стандарт указателей \ свободного выделения памяти бояться. Не доверяют программистам...
Хотя некоторые, конечно, того заслуживают.

Нужно как в легковых машинах, автомат и ручную коробку передач + права разные, соответственно.


--------------------
...
PM   Вверх
mes
Дата 5.5.2011, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Earnest @  5.5.2011,  05:06 Найти цитируемый пост)
а мои компиляторы MS 2003 и 2008

ну 2003 не удивительно, что не знала, а вот с 2005 уже в курсе :
http://msdn.microsoft.com/en-us/library/4e...4(v=vs.80).aspx



--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.