русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Использование динамических массивов


Дата добавления: 2013-12-23; просмотров: 794; Нарушение авторских прав


В начале этой главы при связывании потока с массивом для вывода данных этот массив и его раз­мер передавались конструктору класса ostrstream. Такой подход работает до тех пор, пока изве­стно максимальное количество символов, которое потребуется вывести в массив. Что же делать, когда заранее неизвестно, насколько большой массив понадобится в дальнейшем? Решением этой проблемы служит вторая форма конструктора ostrtream, показанная ниже:

ostrtream();

При использовании этого конструктора ostrstream создает и поддерживает динамически выде­ляемый массив. Этот массив может расти по величине в соответствии с объемом данных, которые необходимо в нем хранить.

Для доступа к динамически выделяемому массиву следует использовать функцию str(). Она имеет следующий прототип:

char* str();

Эта функция «замораживает» массив и возвращает указатель на него. Как только массив замо­рожен, он не может снова использоваться для вывода данных. Поэтому не следует замораживать массив, пока продолжается запись в него символов.

Следующая программа использует динамический массив:

#include <strstrea.h>

#include <iostream.h>

int main()

{

char *p;

ostrstream outs; // динамическое размещение массива

outs << "I like C++ ";

outs << -10 << hex << " ";

outs.setf(ios::showbase);

outs << 100 << ends;

p = outs.str(); /* заморозка динамического буфера и возврат указателя на него */

cout << р;

delete p; //освобождение динамического буфера, созданного ostrstream()

return 0;

}

Как показывает эта программа, если заморозить массив, то придется самостоятельно освободить память при выходе из функции или программы. Однако если массив не заморожен, память бу­дет освобождена автоматически при уничтожении потока ввода/вывода.



Можно также использовать динамические массивы с классом strstream, позволяющим как вво­дить, так и выводить данные в массив.

8.8 Манипуляторы и ввод/вывод в массив

Поскольку потоки для ввода/вывода в массив те же самые, что и другие потоки, то созданные вами манипуляторы могут использоваться также для ввода/вывода в массивы. Например, в прошлой главе был создан манипулятор для вывода setup(), который включал левое выравнивание и устанав­ливал ширину поля, равную 10, а в качестве символа заполнения определял знак $. Этот манипулятор может без изменений использоваться при выводе в массив, как показано ниже:

#include <strstrea.h>

#include <iostream.h>

#include <iomanip.h>

ostream& setup(ostream &stream)

{

stream.setf(ios::left);

stream << setw(10) << setfill('$');

return stream;

}

int main()

{

char str[80];

ostrstream outs(str, sizeof(str));

outs << setup << 99 << ends;

cout << str << endl;

return 0;

}



<== предыдущая лекция | следующая лекция ==>
Произвольный доступ в массив | Форматирование на основе массивов


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.