Лекция-21.ppt
- Количество слайдов: 27
Язык программирования С++ (продолжение) Лекция 02. 13 г. 1
Стандартная библиотека С++ Ни одна «серьезная» программа не может быть написана только с использованием «чистых» конструкций языка; программисты обязательно используют средства поддержки, которые, как правило, разрабатываются одновременно с языком, реализуются в виде библиотек поддержки и создают основу для успешной работы. Стандартная библиотека С++ является «надстройкой» над языком и существенно расширяет его базовые возможности, предоставляя разработчикам большое количество удобных и полезных конструкций, которые могут использоваться ими в качестве «строительных блоков» . Описание библиотеки и требования к ней (состав, интерфейсы, функциональность и пр. ) включены в международный стандарт языка С++: Programming languages – C++, INTERNATIONAL STANDARD ISO/IEC 14882, Second edition 2003 -10 -15 ISO/IEC 14882: 2011. Programming languages — C++, Third edition Лекция 02. 13 г. 2
Язык Средства поддержки Лекция 02. 13 г. 3
Стандартная библиотека С++ Основные источники: Н. Джосьютис C++. Стандартная библиотека. Для профессионалов. –СПб. : Питер, 2004. — 730 с. Электронная документация по библиотеке расположена по адресу: http: //msdn. microsoft. com/ru-ru/library/cscc 687 y(v=vs. 100). aspx Лекция 02. 13 г. 4
Библиотека Строки Ввод/Вывод STL Прочие Контейнеры Поддержка языка Итераторы Диагностика Алгоритмы Основные утилиты Локализация Числа Лекция 02. 13 г. 5
51 файл 33 файла – С++
Лекция 02. 13 г. 7
Интернационализация и локализация (clocale) В заголовочном файле clocale определены типы и функции, поддерживающие интернационализацию и локализацию, которая влияет на формат отображения чисел, даты, времени, денежных сумм, порядок сортировки строк. Совокупность действующих в данный момент времени установок называется локалью. Различные установки локали сгруппированы по 6 категориям, каждая из которых имеет своё условное обозначение: LC_ALL – все категории, LC_COLLATE – порядок сортировки строк, LC_CTYPE – тип символов, LC_MONETARY – форматирование денежных единиц, LC_NUMERIC – форматирование чисел, LC_TIME – форматирование времени Лекция 02. 13 г. 8
Интернационализация и локализация (clocale) Для установки определенной категории локали или всей локали используется функция char *setlocale(int category, const char *locale); //Ex 203. cpp - setlocale example #include
Интернационализация и локализация (clocale) Для хранения информации, используемой при форматировании чисел и денежных единиц служит структура lconv, имеющая 18 полей: char *decimal_point, char *thousands_sep, char *grouping, char *int_curr_symbol, char *currency_symbol, char *mon_decimal_point, char *mon_thousands_sep, char *mon_grouping, char *positive_sign, char *negative_sign, char int_frac_digits, char p_cs_precedes, char p_sep_by_space, char n_cs_precedes, char n_sep_by_space, char p_sign_posn, char n_sign_posn Например, поле int_curr_symbol хранит четырёхсимвольную строку, в которой первые 3 символа – международное обозначение денежной единицы, а четвертый – разделитель между символом денежной единицы и числом (RUR ). Лекция 02. 13 г. 10
Интернационализация и локализация (clocale) Для получения информации о текущем состоянии данной структуры используется функция lconv* localeconv(); //Ex 204. cpp - setlocale example #include
Строки (cstring) Заголовочный файл cstring содержит объявления функций для работы со строками. Все функции делятся на 2 категории: - mem… , которые работают с произвольными участками памяти, рассматривая их как массивы unsigned char; при их вызове должен задаваться размер участка памяти; - str… , которые работают с символьными массивами, заканчивающимися нулевым байтом. Функции для работы со строками из расширенных символов (unicode) объявлены в заголовочном файле cwchar. При работе со строками полезны функции из заголовочных файлов cctype и cwtype, предназначенные для проверки и преобразования объектов суженных или расширенных символьных типов. Существенно более мощные средства обработки строк на С++ содержатся в заголовочном файле string. Лекция 02. 13 г. 12
Строки (cstring) Следующий пример демонстрирует использование функций strlen и tolower. //Ex 207. cpp - cstring example #include
Строки С++ (string) Следующий пример демонстрирует использование класса string. //Ex 208. cpp #include
Библиотека ввода-вывода (iostream) В языке С++ нет специальных операторов для ввода или вывода данных. Вместо этого имеется набор классов, стандартно поставляемых вместе с компилятором, которые и реализуют основные операции ввода-вывода. Библиотека классов для ввода-вывода решает две задачи. Во-первых, она обеспечивает эффективный ввод-вывод данных всех встроенных типов, а также простое и гибкое определение операций ввода-вывода для новых типов, разрабатываемых программистом. Во-вторых, сама библиотека позволяет при необходимости развивать её и модифицировать. Механизм ввода-вывода в С++ называется потоком и реализуется классами istream (поток ввода) и ostream (поток вывода), определёнными в iostream. В этом файле определены также три глобальных объекта: cout, cerr (объекты класса ostream, выполняющие вывод на терминал) и cin (объект класса istream, выполняющий ввод с терминала). cout называется стандартным выводом, cin – стандартным вводом, cerr – стандартным потоком сообщений об ошибках. Вывод осуществляется с помощью операции <<, ввод с помощью операции >>, например: cout << "Пример вывода: " << 34; int x; cin >> x; Лекция 02. 13 г. 15
Операции << и >> для потоков В классах библиотеки iostream операции >> и << определены для всех встроенных типов языка С++ и для строк (тип char*). Если мы хотим использовать такую же запись для ввода и вывода объектов других классов, то для них нужно выполнить перегрузку этих операций. Эта возможность будет рассмотрена в теме «Перегрузка операций для классов» . Лекция 02. 13 г. 16
Форматирование ввода-вывода и манипуляторы Манипуляторы – это объекты-функторы, которые могут использоваться в качестве операндов операторов ввода-вывода для управления потоком. Манипуляторы могут выводить в поток дополнительные данные, считывать их из потока, устанавливать флаги и делать многое другое. Перечень некоторых стандартных манипуляторов: endl - при выводе перейти на новую строку; ends - вывести нулевой байт (признак конца строки символов); flush - немедленно вывести и опустошить все промежуточные буферы; dec - выводить числа в десятичной системе (действует по умолчанию); oct - выводить числа в восьмеричной системе; hex - выводить числа в шестнадцатеричной системе; setw (int n) - установить ширину поля вывода в n символов; setfill(int n) - установить символ-заполнитель; этим символом выводимое значение будет дополняться до необходимой ширины; setprecision(int n) - установить количество цифр после запятой при выводе вещественных чисел; setbase(int n) - установить систему счисления для вывода чисел; n может принимать значения 0, 2, 8, 10, 16, причем 0 означает систему счисления по умолчанию, т. е. 10. Специализированные манипуляторы могут создаваться программистом самостоятельно. Лекция 02. 13 г. 17
Форматирование ввода-вывода и манипуляторы Те же манипуляторы (за исключением endl и ends) могут использоваться и при вводе. В этом случае они описывают представление вводимых чисел. Кроме того, имеется манипулятор, работающий только при вводе, это ws. Данный манипулятор переключает вводимый поток в такой режим, при котором все пробелы (включая табуляцию, переводы строки, переводы каретки и переводы страницы) будут вводиться. По умолчанию эти символы воспринимаются как разделители между атрибутами ввода. int x; // ввести шестнадцатеричное число cin >> hex >> x; Лекция 02. 13 г. 18
Примеры //Ex 100. cpp #include
Примеры //Ex 101. cpp #include
Примеры //Ex 102. cpp #include
Строковые потоки Специальным случаем потоков являются строковые потоки, определенные в заголовочных файлах sstream и strstream. Все операции для этих потоков происходят в памяти. Фактически такие потоки формируют форматированную строку символов, заканчивающуюся нулевым байтом. Строковые потоки применяются для облегчения форматирования данных в памяти. Лекция 02. 13 г. 22
Пример //Ex 110. cpp #include
Пример //Ex 111. cpp #include
Ввод-вывод файлов может выполняться как с помощью низкоуровневых, безо всякого контроля типов, стандартных функций библиотеки С, так и с помощью потоков ввода-вывода. Файл рассматривается как последовательность байтов. Чтение или запись выполняются последовательно. При операциях чтения-записи говорят, что существует текущая позиция, начиная с которой будет производиться следующая операция. Большинство файлов обладают возможностью прямого доступа. Это означает, что можно производить операции ввода-вывода не последовательно, а в произвольном порядке. В библиотеке fstream для ввода-вывода файлов определены классы ofstream (вывод) и ifstream (ввод). Сами операции ввода-вывода выполняются так же, как и для других потоков: >> "ввести" и << "вывести". Различия заключаются в том, как создаются объекты и как они привязываются к нужным файлам. Лекция 02. 13 г. 25
Примеры //Ex 103. cpp #include
//Ex 105. cpp #include


