Слайд 2
Введение
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Ни
одна программа приличных размеров не пишется с использованием только
«голых» конструкций языка.
Сначала разрабатываются или выбираются библиотеки поддержки.
Средства стандартной библиотеки являются частью любой полной реализации С++.
Стандартная библиотека определена в пространстве имен std.
Слайд 3
Ввод/вывод
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Заголовочный
файл .
Возможность управлять вводом-выводом в С++, обеспечивают форматирующие функции-члены,
флаги и манипуляторы.
Флаги, функции и манипуляторы выполняют одну и туже задачу — задают определённый формат ввода/вывода информации в потоках.
Слайд 4
Ввод/вывод
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Ввод/вывод
на экран/с экрана в С++ осуществляется с помощью операторов cin и cout соответственно,
а значит манипуляторы форматирования используются совместно с данными операторами ввода/вывода.
Различие между функциями флагами и манипуляторами форматирования состоит в способе их применения. Теперь рассмотрим способы применения объектов форматирования.
Слайд 5
Ввод/вывод
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Доступ
к функциям осуществляется через операцию точка, а в круглых скобочках
передаётся аргумент.
Ещё один способ форматирования — флаги.
Флаги форматирования позволяют включить или выключить один из параметров ввода/вывода.
Чтобы установить флаг ввода/вывода, необходимо вызвать функцию setf(), если необходимо отключить флаг вывода, то используется функция unsetf().
Слайд 6
Флаги
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Флаги
вывода объявлены в классе ios
Установка флага
cout.setf(ios::/*name_flag*/);
Снятие флага
cout.unsetf(ios::/*name_flag*/);
Слайд 7
Флаги
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Если
при вводе/выводе необходимо установить(снять) несколько
флагов, то можно воспользоваться поразрядной логической операцией ИЛИ |
cout.setf(ios::/*name_flag1*/ | ios::/*name_flag2*/ | ios::/*name_flag_n*/);
cout.unsetf(ios::/*name_flag1*/ | ios::/*name_flag2*/ | ios::/*name_flag_n*/);
Слайд 8
Флаги форматирования в С++
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК
имени П.А. Овчинникова
Слайд 9
Флаги форматирования в С++
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК
имени П.А. Овчинникова
Слайд 10
Флаги форматирования в С++
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК
имени П.А. Овчинникова
Слайд 11
Манипуляторы в С++
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени
П.А. Овчинникова
Ещё один способ форматирования — форматирование с помощью
манипуляторов.
Манипулятор — объект особого типа, который управляет потоками ввода/вывода, для форматирования передаваемой в потоки информации.
Отчасти манипуляторы дополняют функционал, для форматирования ввода/вывода.
Слайд 12
Манипуляторы в С++
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени
П.А. Овчинникова
Слайд 13
Манипуляторы в С++
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени
П.А. Овчинникова
Слайд 14
Манипуляторы в С++
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени
П.А. Овчинникова
Слайд 15
Манипуляторы в С++
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени
П.А. Овчинникова
Слайд 16
Манипуляторы в С++
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени
П.А. Овчинникова
Слайд 17
Строки
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
В
стандартной библиотеке имеется тип string.
Тип string обеспечивает множество полезных
операций над строками
Заголовочный файл .
Слайд 18
Строки
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Для
типа string доступны операторы сравнения ==, ,
<= , >=, !=
Доступны операции +, +=. Данные операторы реализуют операцию конкатенации.
Операцией взятия индекса [ ] str[10]
Метод at() предлагает похожую схему доступа. метод at(), обеспечивает проверку границ и генерирует сключение out_of_range
str.at(7)
Слайд 19
Методы string
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А.
Овчинникова
size Возвращает длину строки
length Возвращает длину строки
max_size Возвращает максимальный
размер строки
resize Изменяет размер строки
capacity возвращет размер выделенной памяти
clear очищает строку
empty проверка на пустоту строки.
Слайд 20
Методы string
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А.
Овчинникова
#include
#include
int main()
{
std::string str("Test string");
std::cout << "size: " << str.size() << std:: endl;
std::cout << "length: " << str.length() << std:: endl;
std::cout << "capacity: " << str.capacity() << std:: endl;
std::cout << "max_size: " << str.max_size() << std:: endl;
std::cout << std::boolalpha << "empty:" << str.empty() << std::endl;
str.clear();
std::cout << "after clean:" << str << std::endl;
return 0;
}
Слайд 21
Методы string
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А.
Овчинникова
#include
#include
int main()
{
std::string str("I like to
code in C");
std::cout << str << '\n';
std::string::size_type sz = str.size();
str.resize(sz + 2, '+');
std::cout << str << '\n';
str.resize(14);
std::cout << str << '\n';
return 0;
}
Слайд 22
Методы string
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А.
Овчинникова
insert вставляет в строку
erase удаляет последовательность символов из строки
replace
заменяет часть строки
Слайд 23
Методы string
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А.
Овчинникова
#include
#include
int main()
{
std::string str = "to
be question";
std::string str2 = "the ";
// used in the same order as described above:
str.insert(6, str2); // to be (the )question
std::cout << str << '\n';
return 0;
}
Слайд 24
Методы string
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А.
Овчинникова
#include
#include
int main()
{
std::string str("This is an example
sentence.");
std::cout << str << std::endl;
str.erase(10, 8);
std::cout << str << std::endl;
return 0;
}
Слайд 25
Методы string
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А.
Овчинникова
#include
#include
int main()
{
std::string base = "this is
a test string.";
std::string str2 = "n example";
std::string str = base; // "this is a test string."
str.replace(9, 5, str2); // "this is an example string." (1)
std::cout << base << std::endl;
std::cout << str << std::endl;
return 0;
}
Слайд 26
Методы string
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А.
Овчинникова
copy копирование последовательности символов из строки
find поиск первого вхождения
подстроки в строку
rfind поиск последнего вхождения подстроки в строку
substr возвращает подстроку строки
Слайд 27
Методы string
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А.
Овчинникова
#include
#include
int main()
{
char buffer[20];
std::string str("Test string...");
std::size_t length = str.copy(buffer, 6, 5);
buffer[length] = '\0';
std::cout << "buffer contains: " << buffer << '\n';
return 0;
}
Слайд 28
Методы string
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А.
Овчинникова
#include
#include
int main()
{
std::string str("There are two
needles in this haystack with needles.");
std::string str2("needle");
std::string::size_type found = str.find(str2);
if (found != std::string::npos)
std::cout << "first 'needle' found at: " << found << std::endl;
str.replace(str.find(str2), str2.length(), "preposition");
std::cout << str << std::endl;
return 0;
}
Слайд 29
Методы string
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А.
Овчинникова
#include
#include
int main()
{
std::string str = "We
think in generalities, but we live in details.";
std::string str2 = str.substr(12, 12);
std::string::size_type pos = str.find("live");
std::string str3 = str.substr(pos);
std::cout << str2 << ' ' << str3 << '\n';
return 0;
}
Слайд 30
Контейнеры
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Многие
вычисления подразумевают создание наборов объектов в различных формах и
обработку таких наборов.
Класс, главной целью которого является хранение объектов, называется контейнером.
Реализация контейнеров, подходящих для данной задачи, и поддержка их основными полезными операциями — важнейшие шаги при написании любой программы.
Слайд 31
Вектор
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Встроенные
массивы имеют фиксированный размер.
Если мы выберем слишком большой
размер, то впустую израсходуем память.
Если же выбранный размер слишком мал, массив может переполниться.
В любом случае нам придется написать код низкого уровня для управления памятью.
Стандартная библиотека предоставляет вектора (vector), которые сами позаботятся об этом