![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всем доброго дня.
если я все правильно понял, то назначить внутренний буфер ostringstream`у можно так:
http://liveworkspace.org/code/50053b3bf031...ae453e1ab76dde9 но я абсолютно не понял, как можно получить сырой указатель на внутренний буфер ostringstream`а. для того, чтоб его можно было назначить istringstream`у без промежуточного копирования в строку. подскажите кто в курсе. спасибо. Добавлено @ 17:27 метод str() не предлагать. цель именно в том, чтоб избавиться от клонирования внутреннего буфера. Это сообщение отредактировал(а) boostcoder - 4.5.2011, 17:37 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
нашел только это: pbase() - начало массива.
но он protected. придется наследоваться :( и еще, не нашел возможности узнать размер внутреннего буфера. есть такие методы, но тоже protected. epptr() - конец массива. pptr() - указатель на текущую позицию. походу, предполагалось, что вычислять размер внутреннего буфера будут при помощи epptr() - pbase() |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
так и сделал.
всем спасибо. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
цели не понял, но..
случайно ли не stringstream нужен ? мне почему то кажется, что его не заметили... |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
проблема в том, что метод str() возвращает копию. к примеру, в ostringstream записали 2.735 Гб. теперь, для того чтоб передать данные другой программе, их нужно получить у ostringstream`а. и вот тут выделяется еще 2.735 Гб. Это сообщение отредактировал(а) boostcoder - 4.5.2011, 19:59 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Я в таких случаях использую не ostringstream, а ostrstream. Функции называются так же, но str возвращает указатель + pcount и что еще надо, чтобы передать данные куда угодно, не копируя... При этом буфер замораживается для дальнейшей записи, но это вряд ли проблема в данном контексте... тем более, что после использования, можно и отморозить.
-------------------- ... |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
оно deprecated.. находится в <strstream> и работает с указателями а не строками... |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
оно что, deprecated с самого выхода стандарта 2003го года?) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Это сообщение отредактировал(а) mes - 5.5.2011, 00:11 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
странно.. нужный класс вроде бы..
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Надо же... а мои компиляторы MS 2003 и 2008 не подозревают о том, что оно deprecated... И я, соответственно...
Хотя, смутно помню вроде, что при переносе проекта под 2008 какая-та ругань была, и я в настройках что-то подкручивала - в проекте миллион всяких ptintf и прочих строковых C-функций, которые нынче тоже считаются вредными. Я этими классами (strstream, istrstream, ostrstream) пользуюсь давно, считаю их очень удобными для всякого рода сериализации, а stringstrrem'ы наоборот - в том числе и по той причине, что назвал boostcoder. Странно, с чего бы вдруг их опустили. Что-то сильно стал стандарт указателей \ свободного выделения памяти бояться. Не доверяют программистам... Хотя некоторые, конечно, того заслуживают. Нужно как в легковых машинах, автомат и ручную коробку передач + права разные, соответственно. -------------------- ... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну 2003 не удивительно, что не знала, а вот с 2005 уже в курсе : http://msdn.microsoft.com/en-us/library/4e...4(v=vs.80).aspx |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |