Пам’ять як потік
Область пам’яті можна вважати потоком і записувати в нього дані так само, як і в файл. Це вимагається, коли потрібно виводити дані в певному форматі (наприклад, залишати лише два знаки після коми) і одночасно використовувати функцію текстового виводу, що в якості аргументу вимагає рядка. Так звичайно роблять, викликаючи функції виводу при розробці застосувань у GUI-середовищах, наприклад, у Windows, оскільки там цим функціям потрібно передавати саме рядок в якості аргументу.
Сімейство потокових класів підтримує також форматування даних в пам’яті. Для виводу в пам’ять існує спеціальний клас ostrstream, породжений класом ostream. Для вводу в пам’ять використовується клас iststreаm, породжений, відповідно, класом istream. Для об’єктів, яким потрібно здійснювати одночасно ввід і вивід, створений клас strstream – спадкоємець iostream.
Найзручніше використовувати ostrstream. На прикладі програми 26.16 показано, як це робити. Почнемо зі створення буфера в пам’яті., потім створимо об’єкт oststream, використовуючи цей буфер (його адресу та розмір) в якості аргументів конструктора потоку. Тепер можна виводити форматований текст в буфер так, наче він є потоковим об’єктом.
#include<strstream>
#include<iostream>
#include<iomanip> //для setiosflags()
#include<conio>
using namespace std;
const int SIZE=80;
int main()
{char ch=’x’;
int j=77;
double d=67890.12345;
char str1[]=»Kartka»;
char str2[]=»Friend»;
char menuff[SIZE]; //буфер в памяті
ostrstream onem(menuff,SIZE); //створити потоковий обєкт
onem<<»ch=»<<ch<<endl //вставити форматовані дані
<<»j=»<<j<<endl
<<setiosflags(ios::fixed) //формат з десятковою комою
<<setprecision(2) //2 знаки після коми
<<»d=»<<d<<endl
<<»str1=»<<str1<<endl
<<»str2=»<<str2<<endl
<<ends; //закінчити буфер символом ‘\0’
cout<<menuff;//вивід вмісту буферу
getch();
return 0;
}
Програма 26.16
Можна форматувати дані звичними способами. Маніпулятор ends вставляє в кінець рядка службовий символ ‘\0’ створення ознаки EOF.
Дата добавления: 2015-08-26; просмотров: 494;