🗊Презентация Язык программирования C++

Нажмите для полного просмотра!
Язык программирования C++, слайд №1Язык программирования C++, слайд №2Язык программирования C++, слайд №3Язык программирования C++, слайд №4Язык программирования C++, слайд №5Язык программирования C++, слайд №6Язык программирования C++, слайд №7Язык программирования C++, слайд №8Язык программирования C++, слайд №9Язык программирования C++, слайд №10Язык программирования C++, слайд №11Язык программирования C++, слайд №12Язык программирования C++, слайд №13Язык программирования C++, слайд №14Язык программирования C++, слайд №15Язык программирования C++, слайд №16Язык программирования C++, слайд №17Язык программирования C++, слайд №18Язык программирования C++, слайд №19Язык программирования C++, слайд №20Язык программирования C++, слайд №21Язык программирования C++, слайд №22Язык программирования C++, слайд №23Язык программирования C++, слайд №24Язык программирования C++, слайд №25Язык программирования C++, слайд №26Язык программирования C++, слайд №27Язык программирования C++, слайд №28Язык программирования C++, слайд №29Язык программирования C++, слайд №30Язык программирования C++, слайд №31Язык программирования C++, слайд №32Язык программирования C++, слайд №33Язык программирования C++, слайд №34Язык программирования C++, слайд №35Язык программирования C++, слайд №36Язык программирования C++, слайд №37Язык программирования C++, слайд №38Язык программирования C++, слайд №39Язык программирования C++, слайд №40Язык программирования C++, слайд №41Язык программирования C++, слайд №42Язык программирования C++, слайд №43Язык программирования C++, слайд №44Язык программирования C++, слайд №45Язык программирования C++, слайд №46Язык программирования C++, слайд №47Язык программирования C++, слайд №48Язык программирования C++, слайд №49Язык программирования C++, слайд №50Язык программирования C++, слайд №51Язык программирования C++, слайд №52Язык программирования C++, слайд №53Язык программирования C++, слайд №54Язык программирования C++, слайд №55Язык программирования C++, слайд №56Язык программирования C++, слайд №57Язык программирования C++, слайд №58Язык программирования C++, слайд №59Язык программирования C++, слайд №60Язык программирования C++, слайд №61Язык программирования C++, слайд №62Язык программирования C++, слайд №63Язык программирования C++, слайд №64Язык программирования C++, слайд №65Язык программирования C++, слайд №66Язык программирования C++, слайд №67Язык программирования C++, слайд №68Язык программирования C++, слайд №69Язык программирования C++, слайд №70Язык программирования C++, слайд №71Язык программирования C++, слайд №72Язык программирования C++, слайд №73Язык программирования C++, слайд №74Язык программирования C++, слайд №75Язык программирования C++, слайд №76Язык программирования C++, слайд №77Язык программирования C++, слайд №78Язык программирования C++, слайд №79Язык программирования C++, слайд №80Язык программирования C++, слайд №81Язык программирования C++, слайд №82Язык программирования C++, слайд №83Язык программирования C++, слайд №84Язык программирования C++, слайд №85Язык программирования C++, слайд №86Язык программирования C++, слайд №87Язык программирования C++, слайд №88Язык программирования C++, слайд №89Язык программирования C++, слайд №90Язык программирования C++, слайд №91Язык программирования C++, слайд №92Язык программирования C++, слайд №93Язык программирования C++, слайд №94Язык программирования C++, слайд №95Язык программирования C++, слайд №96Язык программирования C++, слайд №97Язык программирования C++, слайд №98Язык программирования C++, слайд №99Язык программирования C++, слайд №100Язык программирования C++, слайд №101Язык программирования C++, слайд №102Язык программирования C++, слайд №103Язык программирования C++, слайд №104Язык программирования C++, слайд №105Язык программирования C++, слайд №106Язык программирования C++, слайд №107Язык программирования C++, слайд №108Язык программирования C++, слайд №109Язык программирования C++, слайд №110Язык программирования C++, слайд №111Язык программирования C++, слайд №112Язык программирования C++, слайд №113Язык программирования C++, слайд №114Язык программирования C++, слайд №115Язык программирования C++, слайд №116Язык программирования C++, слайд №117Язык программирования C++, слайд №118Язык программирования C++, слайд №119Язык программирования C++, слайд №120Язык программирования C++, слайд №121Язык программирования C++, слайд №122Язык программирования C++, слайд №123Язык программирования C++, слайд №124Язык программирования C++, слайд №125Язык программирования C++, слайд №126Язык программирования C++, слайд №127Язык программирования C++, слайд №128Язык программирования C++, слайд №129Язык программирования C++, слайд №130Язык программирования C++, слайд №131Язык программирования C++, слайд №132Язык программирования C++, слайд №133Язык программирования C++, слайд №134Язык программирования C++, слайд №135Язык программирования C++, слайд №136Язык программирования C++, слайд №137Язык программирования C++, слайд №138Язык программирования C++, слайд №139Язык программирования C++, слайд №140Язык программирования C++, слайд №141Язык программирования C++, слайд №142Язык программирования C++, слайд №143Язык программирования C++, слайд №144Язык программирования C++, слайд №145Язык программирования C++, слайд №146Язык программирования C++, слайд №147Язык программирования C++, слайд №148Язык программирования C++, слайд №149Язык программирования C++, слайд №150Язык программирования C++, слайд №151Язык программирования C++, слайд №152Язык программирования C++, слайд №153Язык программирования C++, слайд №154Язык программирования C++, слайд №155Язык программирования C++, слайд №156Язык программирования C++, слайд №157Язык программирования C++, слайд №158Язык программирования C++, слайд №159Язык программирования C++, слайд №160Язык программирования C++, слайд №161Язык программирования C++, слайд №162Язык программирования C++, слайд №163Язык программирования C++, слайд №164Язык программирования C++, слайд №165Язык программирования C++, слайд №166Язык программирования C++, слайд №167Язык программирования C++, слайд №168Язык программирования C++, слайд №169Язык программирования C++, слайд №170Язык программирования C++, слайд №171Язык программирования C++, слайд №172Язык программирования C++, слайд №173Язык программирования C++, слайд №174Язык программирования C++, слайд №175Язык программирования C++, слайд №176Язык программирования C++, слайд №177Язык программирования C++, слайд №178Язык программирования C++, слайд №179Язык программирования C++, слайд №180Язык программирования C++, слайд №181Язык программирования C++, слайд №182Язык программирования C++, слайд №183Язык программирования C++, слайд №184Язык программирования C++, слайд №185Язык программирования C++, слайд №186Язык программирования C++, слайд №187Язык программирования C++, слайд №188Язык программирования C++, слайд №189Язык программирования C++, слайд №190Язык программирования C++, слайд №191Язык программирования C++, слайд №192Язык программирования C++, слайд №193Язык программирования C++, слайд №194Язык программирования C++, слайд №195Язык программирования C++, слайд №196Язык программирования C++, слайд №197Язык программирования C++, слайд №198Язык программирования C++, слайд №199Язык программирования C++, слайд №200Язык программирования C++, слайд №201Язык программирования C++, слайд №202Язык программирования C++, слайд №203Язык программирования C++, слайд №204Язык программирования C++, слайд №205Язык программирования C++, слайд №206

Содержание

Вы можете ознакомиться и скачать презентацию на тему Язык программирования C++. Доклад-сообщение содержит 206 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Язык программирования C++
Лекция 1
Описание слайда:
Язык программирования C++ Лекция 1

Слайд 2





Язык С++
Компилируемый статически типизированный язык программирования общего назначения
Совместим с языком C
Но не C99
Поддержка разных парадигм
Процедурное, объектно-ориентированное, обобщенное, функциональное, метапрограммирование
Описание слайда:
Язык С++ Компилируемый статически типизированный язык программирования общего назначения Совместим с языком C Но не C99 Поддержка разных парадигм Процедурное, объектно-ориентированное, обобщенное, функциональное, метапрограммирование

Слайд 3





Программа Hello, World!
Описание слайда:
Программа Hello, World!

Слайд 4





Константы
Описание слайда:
Константы

Слайд 5





Константы
Числовые константы
Целые числа и числа с плавающей запятой
Логические константы
true и false
Символьные константы
Строковые константы
Документация
Описание слайда:
Константы Числовые константы Целые числа и числа с плавающей запятой Логические константы true и false Символьные константы Строковые константы Документация

Слайд 6





Числовые константы
Десятичные
12345, -34021
999999L, 99983UL
Шестнадцатеричные
0xFeedBeef, 0x328aadb
Восьмеричные
003, 0723
Вещественные
1.35, 8.45f
2e+10f, -3.835e-6L
Описание слайда:
Числовые константы Десятичные 12345, -34021 999999L, 99983UL Шестнадцатеричные 0xFeedBeef, 0x328aadb Восьмеричные 003, 0723 Вещественные 1.35, 8.45f 2e+10f, -3.835e-6L

Слайд 7





Логические константы
Логическая константа true служит для обозначения логического значения «Истина», а константа false – значения «Ложь»
Описание слайда:
Логические константы Логическая константа true служит для обозначения логического значения «Истина», а константа false – значения «Ложь»

Слайд 8





Символьные константы
Записывается в виде символа, обрамленного одиночными кавычками
'A', '1'
Значение символьной константы – числовой код символа из набора символов на данной машине
Некоторые символы записываются в виде escape-последовательностей, начинающихся с символа \
'\'', '\0', ‘\n', '\177', '\xff'
Описание слайда:
Символьные константы Записывается в виде символа, обрамленного одиночными кавычками 'A', '1' Значение символьной константы – числовой код символа из набора символов на данной машине Некоторые символы записываются в виде escape-последовательностей, начинающихся с символа \ '\'', '\0', ‘\n', '\177', '\xff'

Слайд 9





Строковые константы (строковые литералы)
Нуль или более символов, заключенных в двойные кавычки
"Hello, world\n"
""
"Hello " "world\n" эквивалентно
"Hello world\n”
Во внутреннем представлении строковая константа – массив символов, завершающийся символом с кодом 0 (‘\0’)
Есть возможность объявления «сырых строковых литералов» (raw string literals), не требующих использования escape-последовательностей
Описание слайда:
Строковые константы (строковые литералы) Нуль или более символов, заключенных в двойные кавычки "Hello, world\n" "" "Hello " "world\n" эквивалентно "Hello world\n” Во внутреннем представлении строковая константа – массив символов, завершающийся символом с кодом 0 (‘\0’) Есть возможность объявления «сырых строковых литералов» (raw string literals), не требующих использования escape-последовательностей

Слайд 10


Язык программирования C++, слайд №10
Описание слайда:

Слайд 11





Представление строковой константы в памяти
Описание слайда:
Представление строковой константы в памяти

Слайд 12





Типы данных
Описание слайда:
Типы данных

Слайд 13





Типы данных языка C++
Целые числа различных размеров со знаком или без
int, short, char
Числа с плавающей запятой различной размерности
float, double, long double
Логический тип
bool
Перечисляемые типы (enum)
Структуры (struct)
Объединения (union)
Массивы
Описание слайда:
Типы данных языка C++ Целые числа различных размеров со знаком или без int, short, char Числа с плавающей запятой различной размерности float, double, long double Логический тип bool Перечисляемые типы (enum) Структуры (struct) Объединения (union) Массивы

Слайд 14





Базовые типы данных
Типы данных целых чисел
char
int
модификаторы
short/long
unsigned/signed
Логический тип
bool
Типы данных вещественных чисел
float
double
Описание слайда:
Базовые типы данных Типы данных целых чисел char int модификаторы short/long unsigned/signed Логический тип bool Типы данных вещественных чисел float double

Слайд 15





Объявления переменных
Переменные объявляются раньше их использования
int lower, upper, step;
char c, line[1000];
bool success;
При объявлении переменные могут быть инициализированы
char esc = '\\';
int i = 0;
int limit = MAXLINE + 1;
float eps = 1.0e-5f;
bool success = true;
Модификатор const указывает, что значение переменной не будет далее изменяться
const double e = 2.71828182845905;
const char msg[] = "предупреждение: "; 
int strlen(const char str[]);
Описание слайда:
Объявления переменных Переменные объявляются раньше их использования int lower, upper, step; char c, line[1000]; bool success; При объявлении переменные могут быть инициализированы char esc = '\\'; int i = 0; int limit = MAXLINE + 1; float eps = 1.0e-5f; bool success = true; Модификатор const указывает, что значение переменной не будет далее изменяться const double e = 2.71828182845905; const char msg[] = "предупреждение: "; int strlen(const char str[]);

Слайд 16





Объявление локальных переменных и констант
Описание слайда:
Объявление локальных переменных и констант

Слайд 17





Автоматическое определение типа переменной
Описание слайда:
Автоматическое определение типа переменной

Слайд 18





Область видимости переменной
Описание слайда:
Область видимости переменной

Слайд 19





Объявление глобальных переменных
Описание слайда:
Объявление глобальных переменных

Слайд 20





Использование глобальных переменных
Описание слайда:
Использование глобальных переменных

Слайд 21





Ключевое слово typedef
Язык Си++ предоставляет оператор typedef, позволяющий давать типам данных новые имена
После этого новое имя типа может использоваться в качестве синонима оригинала
Причины использования typedef
Решение проблемы переносимости
На разных платформах/компиляторах один и тот же тип может иметь различный размер
Желание сделать текст программы более ясным
Описание слайда:
Ключевое слово typedef Язык Си++ предоставляет оператор typedef, позволяющий давать типам данных новые имена После этого новое имя типа может использоваться в качестве синонима оригинала Причины использования typedef Решение проблемы переносимости На разных платформах/компиляторах один и тот же тип может иметь различный размер Желание сделать текст программы более ясным

Слайд 22





Пример использования оператора typedef
Описание слайда:
Пример использования оператора typedef

Слайд 23





Целочисленные типы данных
Служат для хранения целых чисел различного размера
char
short (short int)
int
long (long int)
Целые числа могут быть как со знаком, так и без него
signed
unsigned
Гарантируется следующее соотношение размеров целочисленных типов:
sizeof(char) <= sizeof(short)
sizeof(short) <= sizeof(int)
sizeof(int) <= sizeof(long)
Описание слайда:
Целочисленные типы данных Служат для хранения целых чисел различного размера char short (short int) int long (long int) Целые числа могут быть как со знаком, так и без него signed unsigned Гарантируется следующее соотношение размеров целочисленных типов: sizeof(char) <= sizeof(short) sizeof(short) <= sizeof(int) sizeof(int) <= sizeof(long)

Слайд 24





Знаковые и беззнаковые целые числа
Типы int и short (без модификатора) являются знаковыми
int = signed int
short = signed short
Тип char, как правило, тоже знаковый
char = signed char
Это поведение может изменяться при помощи настроек некоторых компиляторов
Описание слайда:
Знаковые и беззнаковые целые числа Типы int и short (без модификатора) являются знаковыми int = signed int short = signed short Тип char, как правило, тоже знаковый char = signed char Это поведение может изменяться при помощи настроек некоторых компиляторов

Слайд 25





Представление целых чисел в памяти компьютера
Тип char занимает одну ячейку памяти (байт) размером, как правило, 8 бит
Возможны системы, в которых разрядность байта не равна 8 битам
Типы short и int, занимают размер, кратный размеру типа char
Размер типа short <= Размер типа int
При этом число записывается в позиционной системе счисления с основанием 2разрядность байта
Порядок записи байтов, представляющих число в памяти, зависит от архитектуры системы
Little-endian, big-endian, middle-endian
Описание слайда:
Представление целых чисел в памяти компьютера Тип char занимает одну ячейку памяти (байт) размером, как правило, 8 бит Возможны системы, в которых разрядность байта не равна 8 битам Типы short и int, занимают размер, кратный размеру типа char Размер типа short <= Размер типа int При этом число записывается в позиционной системе счисления с основанием 2разрядность байта Порядок записи байтов, представляющих число в памяти, зависит от архитектуры системы Little-endian, big-endian, middle-endian

Слайд 26





Пример представления числа 666 в виде типа short и int
Описание слайда:
Пример представления числа 666 в виде типа short и int

Слайд 27





Типы данных с плавающей запятой
Позволяют задавать вещественные числа различного размера и точности
float
double
long double
Гарантированы следующие соотношения размеров вещественных типов данных
sizeof(float) <= sizeof(double) 
sizeof(double) <= sizeof (long double)
Описание слайда:
Типы данных с плавающей запятой Позволяют задавать вещественные числа различного размера и точности float double long double Гарантированы следующие соотношения размеров вещественных типов данных sizeof(float) <= sizeof(double) sizeof(double) <= sizeof (long double)

Слайд 28





Пример использования вещественных чисел
Описание слайда:
Пример использования вещественных чисел

Слайд 29





Перечислимый тип данных
Описание слайда:
Перечислимый тип данных

Слайд 30





Перечисляемые типы данных (перечисления)
Позволяет задать ограниченный набор именованных целочисленных значений
День недели
Состояние конечного автомата
Модель компьютера и т.д
Особенности
Имена в различных перечислениях должны отличаться друг от друга
 Значения внутри одного перечисления могут совпадать:
enum Status {Ok, Failure, Success = Ok};
Описание слайда:
Перечисляемые типы данных (перечисления) Позволяет задать ограниченный набор именованных целочисленных значений День недели Состояние конечного автомата Модель компьютера и т.д Особенности Имена в различных перечислениях должны отличаться друг от друга Значения внутри одного перечисления могут совпадать: enum Status {Ok, Failure, Success = Ok};

Слайд 31





Пример использования перечислимых типов
Описание слайда:
Пример использования перечислимых типов

Слайд 32





Scoped enum
Появились в C++11
Ограничивают область видимости значений перечислимого типа именем перечисления
Позволяют преодолеть ограничение традиционного enum-а на уникальность значений
Описание слайда:
Scoped enum Появились в C++11 Ограничивают область видимости значений перечислимого типа именем перечисления Позволяют преодолеть ограничение традиционного enum-а на уникальность значений

Слайд 33





Проблема традиционного enum-а
Описание слайда:
Проблема традиционного enum-а

Слайд 34





Решение со Scoped enum
Описание слайда:
Решение со Scoped enum

Слайд 35





Пример использования логического типа данных
Описание слайда:
Пример использования логического типа данных

Слайд 36





Набор используемых символов
Используются почти все графические символы ASCII таблицы (кроме @ и $)
Язык является чувствительным к регистру символов
Для записи операторов используются строчные буквы
Для записи идентификаторов – цифры, заглавные и строчные буквы и символ подчеркивания
Идентификатор не может начинаться с цифры
Описание слайда:
Набор используемых символов Используются почти все графические символы ASCII таблицы (кроме @ и $) Язык является чувствительным к регистру символов Для записи операторов используются строчные буквы Для записи идентификаторов – цифры, заглавные и строчные буквы и символ подчеркивания Идентификатор не может начинаться с цифры

Слайд 37





Основные операторы языка Си
Общие
Арифметические операторы и оператор присваивания
Логические операторы и операторы сравнения
Оператор sizeof
Управление ходом выполнения программы
Условные операторы
Операторы циклов
Оператор множественного выбора
Операторы для работы с массивами, структурами и объединениями
Операторы для работы с указателями
Описание слайда:
Основные операторы языка Си Общие Арифметические операторы и оператор присваивания Логические операторы и операторы сравнения Оператор sizeof Управление ходом выполнения программы Условные операторы Операторы циклов Оператор множественного выбора Операторы для работы с массивами, структурами и объединениями Операторы для работы с указателями

Слайд 38





Арифметические операторы
Бинарные
+
-
*
/
% (остаток от деления – применяется только к целым)
int i = 10 % 3; /* i = 1; */
Деление целых сопровождается отбрасыванием дробной части
float f = 8 / 3; /* f = 2.0 */
Унарные (ставятся перед операндом)
+
int i = +1;
-
int j = -8;
Описание слайда:
Арифметические операторы Бинарные + - * / % (остаток от деления – применяется только к целым) int i = 10 % 3; /* i = 1; */ Деление целых сопровождается отбрасыванием дробной части float f = 8 / 3; /* f = 2.0 */ Унарные (ставятся перед операндом) + int i = +1; - int j = -8;

Слайд 39





Пример
Описание слайда:
Пример

Слайд 40





Операторы отношения 
Операторы отношения
>
>=
<
<=
Операторы сравнения на равенство
==
!=
Логические операторы
&& - логическое И
char ch = getchar();
int isDigit = (ch >= ‘0’) && (ch <= ‘9’);
|| - логическое ИЛИ
char ch = getchar();
if ((ch == ‘ ‘) || (ch == ‘\n’) || (ch == ‘\t’))
    printf(“Разделитель”);
! – логическое НЕ
if (!valid) эквивалентно if (valid == 0)
Вычисления операторов && и || прекращаются как только станет известна истинность или ложность результата
Описание слайда:
Операторы отношения Операторы отношения > >= < <= Операторы сравнения на равенство == != Логические операторы && - логическое И char ch = getchar(); int isDigit = (ch >= ‘0’) && (ch <= ‘9’); || - логическое ИЛИ char ch = getchar(); if ((ch == ‘ ‘) || (ch == ‘\n’) || (ch == ‘\t’)) printf(“Разделитель”); ! – логическое НЕ if (!valid) эквивалентно if (valid == 0) Вычисления операторов && и || прекращаются как только станет известна истинность или ложность результата

Слайд 41





Пример
Описание слайда:
Пример

Слайд 42





Операторы инкремента и декремента
Увеличивают или уменьшают значение операнда на 1
++
--
Имеют две формы
Префиксная форма (возвращает новое значение аргумента)
int i = 0;
int j = ++i; /* i = 1; j = 1; */
Постфиксная форма (возвращает старое значение аргумента)
int i = 0;
int j = i--; /* i = -1; j = 0; */
Операторы инкремента и декремента можно применять только к переменным
int i = (j + y)++; /* ошибка */
Описание слайда:
Операторы инкремента и декремента Увеличивают или уменьшают значение операнда на 1 ++ -- Имеют две формы Префиксная форма (возвращает новое значение аргумента) int i = 0; int j = ++i; /* i = 1; j = 1; */ Постфиксная форма (возвращает старое значение аргумента) int i = 0; int j = i--; /* i = -1; j = 0; */ Операторы инкремента и декремента можно применять только к переменным int i = (j + y)++; /* ошибка */

Слайд 43





Побитовые операторы
Данные операторы позволяют осуществлять операции над отдельными битами целочисленных операндов
& - побитовое И
int i = 0xde & 0xf0; /* i = 0xd0 */
| - побитовое ИЛИ 
int i = 0xf0 | 0x03; /* i = 0xf3 */
^ - побитовое исключающее ИЛИ
int i = 0x03 ^ 0x02; /* i = 0x01 */
<< - сдвиг влево
int i = 1 << 3; /* i = 8 */
>> - сдвиг вправо
int i = 0xd0 >> 4; /* i = 0x0d */
~ - побитовое отрицание (унарный оператор).
char i = ~0x1; /* i = 0xfe (0xfe = 11111110b) */
Описание слайда:
Побитовые операторы Данные операторы позволяют осуществлять операции над отдельными битами целочисленных операндов & - побитовое И int i = 0xde & 0xf0; /* i = 0xd0 */ | - побитовое ИЛИ int i = 0xf0 | 0x03; /* i = 0xf3 */ ^ - побитовое исключающее ИЛИ int i = 0x03 ^ 0x02; /* i = 0x01 */ << - сдвиг влево int i = 1 << 3; /* i = 8 */ >> - сдвиг вправо int i = 0xd0 >> 4; /* i = 0x0d */ ~ - побитовое отрицание (унарный оператор). char i = ~0x1; /* i = 0xfe (0xfe = 11111110b) */

Слайд 44





Пример: функция getbits
Описание слайда:
Пример: функция getbits

Слайд 45





Операторы и выражения присваивания
Служат для присваивания переменным значения некоторого выражения
i = 3;
i += 8;
i <<= 1;
j %= 3;
Типом и значением выражения присваивания является тип и значение левого операнда после завершения присваивания
while ((c = getchar()) != EOF)
{
    // do something
}
Описание слайда:
Операторы и выражения присваивания Служат для присваивания переменным значения некоторого выражения i = 3; i += 8; i <<= 1; j %= 3; Типом и значением выражения присваивания является тип и значение левого операнда после завершения присваивания while ((c = getchar()) != EOF) { // do something }

Слайд 46





Пример: функция bitcount
Описание слайда:
Пример: функция bitcount

Слайд 47





Преобразование типов в стиле С
Происходит, когда операнды оператора принадлежат к разным типам
Неявное преобразование
int i = 7.0 + 3 – 2.0f;
Явное преобразование
int i = (int)(7.0 + 3 – 2.0f);
Если один из аргументов является знаковым целым, а второй беззнаковым, результатом будет целое число без знака
Описание слайда:
Преобразование типов в стиле С Происходит, когда операнды оператора принадлежат к разным типам Неявное преобразование int i = 7.0 + 3 – 2.0f; Явное преобразование int i = (int)(7.0 + 3 – 2.0f); Если один из аргументов является знаковым целым, а второй беззнаковым, результатом будет целое число без знака

Слайд 48





Опасность неявного приведения типов
Описание слайда:
Опасность неявного приведения типов

Слайд 49





Решение проблемы – явное приведение типов
Описание слайда:
Решение проблемы – явное приведение типов

Слайд 50





Недостатки оператора преобразования типов в стиле C
Несмотря на свою простоту данный способ преобразования типов  обладает рядом недостатков
Допускаются потенциально некорректные преобразования типов, зачастую без информирования разработчика
Сложно найти в тексте программы
Описание слайда:
Недостатки оператора преобразования типов в стиле C Несмотря на свою простоту данный способ преобразования типов обладает рядом недостатков Допускаются потенциально некорректные преобразования типов, зачастую без информирования разработчика Сложно найти в тексте программы

Слайд 51





Пример
Описание слайда:
Пример

Слайд 52





Преобразование типов в стиле C++
В языке C++ введены 4 оператора приведения типов
static_cast<Type>(arg)
dynamic_cast<Type>(arg)
const_cast<Type>(arg)
reinterpret_cast<Type>(arg)
Каждый из данных операторов применяется для определенного преобразования типов в конкретной ситуации
В программах на C++ следует отдавать предпочтение данным операторам
Описание слайда:
Преобразование типов в стиле C++ В языке C++ введены 4 оператора приведения типов static_cast<Type>(arg) dynamic_cast<Type>(arg) const_cast<Type>(arg) reinterpret_cast<Type>(arg) Каждый из данных операторов применяется для определенного преобразования типов в конкретной ситуации В программах на C++ следует отдавать предпочтение данным операторам

Слайд 53





Оператор static_cast
Применяется для статического преобразования одного типа к другому
Также может применяться для статического преобразования типов указателей в пределах иерархии классов
Описание слайда:
Оператор static_cast Применяется для статического преобразования одного типа к другому Также может применяться для статического преобразования типов указателей в пределах иерархии классов

Слайд 54





Пример
Описание слайда:
Пример

Слайд 55





Оператор dynamic_cast
Применяется для динамического преобразования типов в пределах иерархии классов
(об этом позже)
Описание слайда:
Оператор dynamic_cast Применяется для динамического преобразования типов в пределах иерархии классов (об этом позже)

Слайд 56





Оператор const_cast
Применяется для снятия константности с константного выражения
Описание слайда:
Оператор const_cast Применяется для снятия константности с константного выражения

Слайд 57





Оператор reinterpret_cast
Может применяться для преобразования между целочисленными типами и указателями, а также между указателями на несвязанные друг с другом типы данных
Описание слайда:
Оператор reinterpret_cast Может применяться для преобразования между целочисленными типами и указателями, а также между указателями на несвязанные друг с другом типы данных

Слайд 58





Условное выражение
Условное выражение имеет вид:
выр1 ? выр2 : выр3 
Сначала вычисляется выражение 1
Если оно истинно (не равно нулю), то вычисляется выражение 2 и его значение становится значением всего условного выражения
В противном случае вычисляется выражение 3 и становится значением всего условного выражения
Пример
z = (a > b) ? a : b; /* z = max(a, b)*/
Описание слайда:
Условное выражение Условное выражение имеет вид: выр1 ? выр2 : выр3 Сначала вычисляется выражение 1 Если оно истинно (не равно нулю), то вычисляется выражение 2 и его значение становится значением всего условного выражения В противном случае вычисляется выражение 3 и становится значением всего условного выражения Пример z = (a > b) ? a : b; /* z = max(a, b)*/

Слайд 59





Приоритет и очередность выполнения операторов
Описание слайда:
Приоритет и очередность выполнения операторов

Слайд 60





Управление выполнением программы
Описание слайда:
Управление выполнением программы

Слайд 61





Инструкции и блоки
Выражение (например, x = 0) становится инструкцией, если в конце поставить точку с запятой
x = 0;
printf(“Hello”);
В Си точка с запятой является заключающим символом инструкции, а не разделителем, как в языке Паскаль. 
Фигурные скобки { и } используются для объединения объявлений и инструкций в составную инструкцию, или блок 
с т.з. синтаксиса языка блок воспринимается как одна инструкция
Описание слайда:
Инструкции и блоки Выражение (например, x = 0) становится инструкцией, если в конце поставить точку с запятой x = 0; printf(“Hello”); В Си точка с запятой является заключающим символом инструкции, а не разделителем, как в языке Паскаль. Фигурные скобки { и } используются для объединения объявлений и инструкций в составную инструкцию, или блок с т.з. синтаксиса языка блок воспринимается как одна инструкция

Слайд 62





Блоки и область видимости
Переменные видимы внутри того блока, где она объявлена
При покидании своего блока видимости переменная уничтожается, а занимаемая ею область памяти – освобождается
(автоматическое управление памятью)
Описание слайда:
Блоки и область видимости Переменные видимы внутри того блока, где она объявлена При покидании своего блока видимости переменная уничтожается, а занимаемая ею область памяти – освобождается (автоматическое управление памятью)

Слайд 63





Конструкция if-else
Оператор if позволяет выполнить тот или иной участок кода в зависимости от значения некоторого выражения
if (<выражение>)
    <инстр.1>
else
    <инстр.2>
if (<выражение>)
    <инстр>
Описание слайда:
Конструкция if-else Оператор if позволяет выполнить тот или иной участок кода в зависимости от значения некоторого выражения if (<выражение>) <инстр.1> else <инстр.2> if (<выражение>) <инстр>

Слайд 64





Конструкция else-if
Позволяет осуществлять многоступенчатое решение
if (выражение) 
    инструкция 
else if (выражение) 
    инструкция 
else if (выражение) 
    инструкция 
else if (выражение) 
    инструкция 
else 
    инструкция
Описание слайда:
Конструкция else-if Позволяет осуществлять многоступенчатое решение if (выражение) инструкция else if (выражение) инструкция else if (выражение) инструкция else if (выражение) инструкция else инструкция

Слайд 65





Пример, бинарный поиск
Описание слайда:
Пример, бинарный поиск

Слайд 66





Оператор switch
Используется для выбора одного из нескольких путей
Осуществляется проверка на совпадение значения выражения с одной из некоторого набора целых констант, и выполняет соответствующую ветвь программы
Инструкция break выполняет выход из блока switch
Описание слайда:
Оператор switch Используется для выбора одного из нескольких путей Осуществляется проверка на совпадение значения выражения с одной из некоторого набора целых констант, и выполняет соответствующую ветвь программы Инструкция break выполняет выход из блока switch

Слайд 67


Язык программирования C++, слайд №67
Описание слайда:

Слайд 68


Язык программирования C++, слайд №68
Описание слайда:

Слайд 69





Циклическое выполнение
Описание слайда:
Циклическое выполнение

Слайд 70





Что такое циклическое выполнение
Цикл – последовательность из нескольких операторов, указываемая в программе один раз, которая выполняется несколько раз подряд
Допускается существование бесконечного цикла
Тело цикла - последовательность операторов, предназначенная для многократного выполнения в цикле
Описание слайда:
Что такое циклическое выполнение Цикл – последовательность из нескольких операторов, указываемая в программе один раз, которая выполняется несколько раз подряд Допускается существование бесконечного цикла Тело цикла - последовательность операторов, предназначенная для многократного выполнения в цикле

Слайд 71





Циклическое выполнение в языке Си
Циклическое выполнение в языке Си осуществляется при использовании следующих операторов цикла:
while
for
do..while
Внутри циклов могут использоваться операторы управления работой цикла:
break для досрочного выхода из цикла
continue для пропуска текущей итерации
Описание слайда:
Циклическое выполнение в языке Си Циклическое выполнение в языке Си осуществляется при использовании следующих операторов цикла: while for do..while Внутри циклов могут использоваться операторы управления работой цикла: break для досрочного выхода из цикла continue для пропуска текущей итерации

Слайд 72





Оператор while
Оператор while служит для организации циклов с предусловием
цикл, который выполняется, пока истинно некоторое условие, указанное перед его началом
Синтаксис
while (выражение)
    инструкция
Инструкция (тело цикла) выполняется до тех пор, пока выражение принимает ненулевое значение
Описание слайда:
Оператор while Оператор while служит для организации циклов с предусловием цикл, который выполняется, пока истинно некоторое условие, указанное перед его началом Синтаксис while (выражение) инструкция Инструкция (тело цикла) выполняется до тех пор, пока выражение принимает ненулевое значение

Слайд 73





Пример: нахождение наибольшего общего делителя
Описание слайда:
Пример: нахождение наибольшего общего делителя

Слайд 74





Оператор for
Оператор for служит для организации циклов со счетчиком
Синтаксис
for (выр1; выр2; выр3)
    инструкция
Выражение1 выполняется один раз перед началом цикла 
Например, оператор инициализации счетчика цикла
Выполнение инструкции (тело цикла) продолжается до тех пор, пока выражение2 имеет ненулевое значение
если выражение2 отсутствует, то выполнение цикла продолжается бесконечно
После каждой итерации цикла выполняется выражение3
Например, изменение счетчика цикла
Описание слайда:
Оператор for Оператор for служит для организации циклов со счетчиком Синтаксис for (выр1; выр2; выр3) инструкция Выражение1 выполняется один раз перед началом цикла Например, оператор инициализации счетчика цикла Выполнение инструкции (тело цикла) продолжается до тех пор, пока выражение2 имеет ненулевое значение если выражение2 отсутствует, то выполнение цикла продолжается бесконечно После каждой итерации цикла выполняется выражение3 Например, изменение счетчика цикла

Слайд 75





Простой цикл for
Описание слайда:
Простой цикл for

Слайд 76





Range-based for
Версия цикла for, предназначенная для перебора элементов некоторого диапазона
Массивы, строки, контейнеры стандартной библиотеки, пользовательские типы данных
Синтаксис:
for (тип идентификатор : диапазон)
    инструкция
Описание слайда:
Range-based for Версия цикла for, предназначенная для перебора элементов некоторого диапазона Массивы, строки, контейнеры стандартной библиотеки, пользовательские типы данных Синтаксис: for (тип идентификатор : диапазон) инструкция

Слайд 77





Пример: обход элементов массива
Описание слайда:
Пример: обход элементов массива

Слайд 78


Язык программирования C++, слайд №78
Описание слайда:

Слайд 79





Оператор do-while
Оператор do-while служит для организации циклов с постусловием
цикл, в котором условие проверяется после выполнения тела цикла
тело всегда выполняется хотя бы один раз
Синтаксис
do
    инструкция
while (выражение);
Инструкция выполняется до тех пор, пока выражение принимает ненулевое значение
Описание слайда:
Оператор do-while Оператор do-while служит для организации циклов с постусловием цикл, в котором условие проверяется после выполнения тела цикла тело всегда выполняется хотя бы один раз Синтаксис do инструкция while (выражение); Инструкция выполняется до тех пор, пока выражение принимает ненулевое значение

Слайд 80





Пример
Описание слайда:
Пример

Слайд 81





Бесконечные циклы for, while, do-while
Описание слайда:
Бесконечные циклы for, while, do-while

Слайд 82





Вложенные циклы
Один цикл может быть вложен в другой
При этом выполнение внутреннего цикла выполняется как часть оператора внешнего цикла
Описание слайда:
Вложенные циклы Один цикл может быть вложен в другой При этом выполнение внутреннего цикла выполняется как часть оператора внешнего цикла

Слайд 83





Инструкции break и continue
Инструкция break осуществляет немедленный выход из тела цикла, внутри которого она находится
Также инструкция break осуществляет выход из оператора switch
Инструкция continue осуществляет пропуск оставшихся операторов тела цикла, внутри которого она находится, и переход на следующую итерацию цикла
В циклах while и do-while осуществляется переход к проверке условия
В цикле for осуществляется переход к приращению переменной цикла
Описание слайда:
Инструкции break и continue Инструкция break осуществляет немедленный выход из тела цикла, внутри которого она находится Также инструкция break осуществляет выход из оператора switch Инструкция continue осуществляет пропуск оставшихся операторов тела цикла, внутри которого она находится, и переход на следующую итерацию цикла В циклах while и do-while осуществляется переход к проверке условия В цикле for осуществляется переход к приращению переменной цикла

Слайд 84





Пример: поиск простых чисел
Описание слайда:
Пример: поиск простых чисел

Слайд 85





Инструкция goto
Инструкция goto позволяет осуществить переход на заданную метку внутри текущей функции
Синтаксис:
goto метка;
Как правило, использование инструкции goto усложняет структуру программы и без крайней необходимости ею пользоваться не стоит
Если Вы все еще думаете об использовании этого оператора – использовать его все равно не стоит
Описание слайда:
Инструкция goto Инструкция goto позволяет осуществить переход на заданную метку внутри текущей функции Синтаксис: goto метка; Как правило, использование инструкции goto усложняет структуру программы и без крайней необходимости ею пользоваться не стоит Если Вы все еще думаете об использовании этого оператора – использовать его все равно не стоит

Слайд 86





Пример
Описание слайда:
Пример

Слайд 87





Структуры
Описание слайда:
Структуры

Слайд 88





Структуры
Структура - это одна или несколько переменных (возможно, различных типов), которые для удобства работы с ними сгруппированы под одним именем.
Структуры помогают в организации сложных данных, позволяя группу связанных между собой переменных трактовать не как множество отдельных элементов, а как единое целое
Описание слайда:
Структуры Структура - это одна или несколько переменных (возможно, различных типов), которые для удобства работы с ними сгруппированы под одним именем. Структуры помогают в организации сложных данных, позволяя группу связанных между собой переменных трактовать не как множество отдельных элементов, а как единое целое

Слайд 89


Язык программирования C++, слайд №89
Описание слайда:

Слайд 90


Язык программирования C++, слайд №90
Описание слайда:

Слайд 91


Язык программирования C++, слайд №91
Описание слайда:

Слайд 92


Язык программирования C++, слайд №92
Описание слайда:

Слайд 93


Язык программирования C++, слайд №93
Описание слайда:

Слайд 94


Язык программирования C++, слайд №94
Описание слайда:

Слайд 95





Объединения
Описание слайда:
Объединения

Слайд 96





Объединения
Объединение - это тип данных, который может содержать (в разные моменты времени) объекты различных типов и размеров
Объединения позволяют хранить разнородные данные в одной и той же области памяти без включения в программу машинно-зависимой информации
Описание слайда:
Объединения Объединение - это тип данных, который может содержать (в разные моменты времени) объекты различных типов и размеров Объединения позволяют хранить разнородные данные в одной и той же области памяти без включения в программу машинно-зависимой информации

Слайд 97


Язык программирования C++, слайд №97
Описание слайда:

Слайд 98





Пример 2
Описание слайда:
Пример 2

Слайд 99





Массивы
Описание слайда:
Массивы

Слайд 100





Массивы
Массивы позволяют объявить несколько (один и более) последовательных объектов, объединенных под одним именем, и осуществлять к ним индексированный доступ
В качестве индексов используются целые числа, или типы, приводимые к целым
Размер массива задается статически на этапе компиляции и не может быть изменен в ходе работы программы
Индекс начального элемента массива равен нулю
Есть возможность объявления многомерных массивов
Описание слайда:
Массивы Массивы позволяют объявить несколько (один и более) последовательных объектов, объединенных под одним именем, и осуществлять к ним индексированный доступ В качестве индексов используются целые числа, или типы, приводимые к целым Размер массива задается статически на этапе компиляции и не может быть изменен в ходе работы программы Индекс начального элемента массива равен нулю Есть возможность объявления многомерных массивов

Слайд 101


Язык программирования C++, слайд №101
Описание слайда:

Слайд 102





Массивы символов
Описание слайда:
Массивы символов

Слайд 103





Определение размера массива
Описание слайда:
Определение размера массива

Слайд 104





Многомерные массивы
Описание слайда:
Многомерные массивы

Слайд 105





Передача массива в функцию
Описание слайда:
Передача массива в функцию

Слайд 106





Указатели, динамическая память
Описание слайда:
Указатели, динамическая память

Слайд 107





Указатели
Указатель – используются для хранения адресов переменных в памяти
Основные области применения
Работа с динамической памятью
Работа с массивами
Передача параметров в функцию по ссылке
Организация связанных структур данных (списки, деревья)
Описание слайда:
Указатели Указатель – используются для хранения адресов переменных в памяти Основные области применения Работа с динамической памятью Работа с массивами Передача параметров в функцию по ссылке Организация связанных структур данных (списки, деревья)

Слайд 108


Язык программирования C++, слайд №108
Описание слайда:

Слайд 109





Хранение данных
В C++ есть три разных способа выделения памяти для объектов
Статическое: пространство для объектов создаётся в области хранения данных программы в момент компиляции;
Автоматическое: объекты можно временно хранить в стеке; эта память затем автоматически освобождается и может быть использована снова, после того, как программа выходит из блока, использующего её. 
Динамическое: блоки памяти нужного размера могут запрашиваться во время выполнения программы с помощью оператора new в области памяти, называемой кучей. Эти блоки освобождаются и могут быть использованы снова после вызова для них оператора delete.
Описание слайда:
Хранение данных В C++ есть три разных способа выделения памяти для объектов Статическое: пространство для объектов создаётся в области хранения данных программы в момент компиляции; Автоматическое: объекты можно временно хранить в стеке; эта память затем автоматически освобождается и может быть использована снова, после того, как программа выходит из блока, использующего её. Динамическое: блоки памяти нужного размера могут запрашиваться во время выполнения программы с помощью оператора new в области памяти, называемой кучей. Эти блоки освобождаются и могут быть использованы снова после вызова для них оператора delete.

Слайд 110





Организация памяти в языке C++
С точки зрения языка С++ память представляет собой массив последовательно пронумерованных ячеек памяти, с которыми можно работать по отдельности или связными кусками
Порядковый номер ячейки называется ее адресом
Эта память используется для хранения значений переменных.
Переменные различных типов могут занимать различное количество ячеек памяти, и иметь различные способы представления в памяти
Описание слайда:
Организация памяти в языке C++ С точки зрения языка С++ память представляет собой массив последовательно пронумерованных ячеек памяти, с которыми можно работать по отдельности или связными кусками Порядковый номер ячейки называется ее адресом Эта память используется для хранения значений переменных. Переменные различных типов могут занимать различное количество ячеек памяти, и иметь различные способы представления в памяти

Слайд 111





Пример
Описание слайда:
Пример

Слайд 112





Что такое указатель?
Указатель – это переменная, которая может хранить адрес другой переменной в памяти заданного типа
Указатели – мощное средство языка С++, позволяющее эффективно решать различные задачи
Использование указателей открывает доступ к памяти машины, поэтому пользоваться ими следует аккуратно
Описание слайда:
Что такое указатель? Указатель – это переменная, которая может хранить адрес другой переменной в памяти заданного типа Указатели – мощное средство языка С++, позволяющее эффективно решать различные задачи Использование указателей открывает доступ к памяти машины, поэтому пользоваться ими следует аккуратно

Слайд 113





Объявление указателя
Указатель на переменную определенного типа объявляется следующим образом:
<тип> *<идентификатор>;
Например:
int *pointerToInt;
Указатель, способный хранить адрес переменной любого типа имеет тип void*:
void * pointerToAnyType;
Как и к обычным переменным, к указателям можно применять модификатор const:
const int * pointerToConstInt;
char * const constPointerToChar = &ch;
const double * const constPointerToConstDouble = &x;
float * const constPointerToFloat = &y;
const void * pointerToConstData;
Описание слайда:
Объявление указателя Указатель на переменную определенного типа объявляется следующим образом: <тип> *<идентификатор>; Например: int *pointerToInt; Указатель, способный хранить адрес переменной любого типа имеет тип void*: void * pointerToAnyType; Как и к обычным переменным, к указателям можно применять модификатор const: const int * pointerToConstInt; char * const constPointerToChar = &ch; const double * const constPointerToConstDouble = &x; float * const constPointerToFloat = &y; const void * pointerToConstData;

Слайд 114





Получение адреса переменной
Для взятия адреса переменной в памяти служит унарный оператор &
Этот оператор возвращает адрес переменной, который может быть присвоен указателю совместимого типа
Оператор взятия адреса применим только к переменным. Его нельзя применять к числовым константам, литералам, выражениям или регистровым переменным
Описание слайда:
Получение адреса переменной Для взятия адреса переменной в памяти служит унарный оператор & Этот оператор возвращает адрес переменной, который может быть присвоен указателю совместимого типа Оператор взятия адреса применим только к переменным. Его нельзя применять к числовым константам, литералам, выражениям или регистровым переменным

Слайд 115





Оператор косвенного доступа
Для доступа к значению, на которое ссылается указатель, необходимо его разыменование (dereferencing), осуществляемое при помощи унарного оператора *
int * p = &i;
*p = 5;
Описание слайда:
Оператор косвенного доступа Для доступа к значению, на которое ссылается указатель, необходимо его разыменование (dereferencing), осуществляемое при помощи унарного оператора * int * p = &i; *p = 5;

Слайд 116





Пример
Описание слайда:
Пример

Слайд 117





Инициализация указателей
Значение неинициализированного указателя не определено
Разыменование такого указателя приводит к неопределенному поведению
Лучше присвоить указателю нулевое значение (или символическую константу NULL), чтобы подчеркнуть, что он не ссылается ни на какую переменную:
char * p1 = 0;
char * p2 = NULL;
В стандарт C++11 введено специальное ключевое слово nullptr, обозначающее нулевой указатель
Разыменование нулевого указателя также приводит к неопределенному поведению, однако появляется возможность проверки значения указателя:
if (p != nullptr) // или просто if (p)
Описание слайда:
Инициализация указателей Значение неинициализированного указателя не определено Разыменование такого указателя приводит к неопределенному поведению Лучше присвоить указателю нулевое значение (или символическую константу NULL), чтобы подчеркнуть, что он не ссылается ни на какую переменную: char * p1 = 0; char * p2 = NULL; В стандарт C++11 введено специальное ключевое слово nullptr, обозначающее нулевой указатель Разыменование нулевого указателя также приводит к неопределенному поведению, однако появляется возможность проверки значения указателя: if (p != nullptr) // или просто if (p)

Слайд 118





NULL (или 0) vs nullptr
В программах на C++11 следует использовать nullptr вместо NULL или 0
У nullptr отсутствует неявное преобразование к целочисленным типам
При этом сохраняется неявное преобразование к типу bool (значение false)
Описание слайда:
NULL (или 0) vs nullptr В программах на C++11 следует использовать nullptr вместо NULL или 0 У nullptr отсутствует неявное преобразование к целочисленным типам При этом сохраняется неявное преобразование к типу bool (значение false)

Слайд 119


Язык программирования C++, слайд №119
Описание слайда:

Слайд 120





Копирование указателей
Как и в случае обычных переменных, значение одного указателя может быть присвоено другому при помощи оператора =
Следует помнить, что в этому случае копируется адрес переменной, а не ее значение
Для копирования значения переменной, на которую ссылается указатель, необходимо применить оператор разыменования *
char a = ‘A’;
char b = ‘B’;
char c = ‘C’;
char *pa = &a;
char *pb = &b;
char *pc = &c;
pa = pb; // pa и pb теперь хранят адрес b
*pa = *pc; // b теперь хранит значение ‘C’
Описание слайда:
Копирование указателей Как и в случае обычных переменных, значение одного указателя может быть присвоено другому при помощи оператора = Следует помнить, что в этому случае копируется адрес переменной, а не ее значение Для копирования значения переменной, на которую ссылается указатель, необходимо применить оператор разыменования * char a = ‘A’; char b = ‘B’; char c = ‘C’; char *pa = &a; char *pb = &b; char *pc = &c; pa = pb; // pa и pb теперь хранят адрес b *pa = *pc; // b теперь хранит значение ‘C’

Слайд 121





Указатели и аргументы функций
В языке Си параметры в функцию передаются по значению.
Указатели – единственный способ изменить значение параметра изнутри функции
В языке C++ появилась возможность передачи параметров по ссылке
Описание слайда:
Указатели и аргументы функций В языке Си параметры в функцию передаются по значению. Указатели – единственный способ изменить значение параметра изнутри функции В языке C++ появилась возможность передачи параметров по ссылке

Слайд 122





Указатели на функции
В Си можно объявить указатель на функцию и работать с ним как с обычной переменной, сохраняя возможность вызова функции по указателю на нее
Данная возможность позволяет иметь несколько реализаций алгоритма, имеющих общий интерфейс
Для получения указателя следует воспользоваться оператором взятия адреса &
В C++ можно использовать имя функции
В C++ есть возможность использовать функциональные объекты
В C++11 появились безымянные функции (lambda-функции)
У Lambda-функций, не имеющих состояния, есть возможность получения адреса
Описание слайда:
Указатели на функции В Си можно объявить указатель на функцию и работать с ним как с обычной переменной, сохраняя возможность вызова функции по указателю на нее Данная возможность позволяет иметь несколько реализаций алгоритма, имеющих общий интерфейс Для получения указателя следует воспользоваться оператором взятия адреса & В C++ можно использовать имя функции В C++ есть возможность использовать функциональные объекты В C++11 появились безымянные функции (lambda-функции) У Lambda-функций, не имеющих состояния, есть возможность получения адреса

Слайд 123


Язык программирования C++, слайд №123
Описание слайда:

Слайд 124


Язык программирования C++, слайд №124
Описание слайда:

Слайд 125


Язык программирования C++, слайд №125
Описание слайда:

Слайд 126





Указатели и массивы
Указатели и массивы в C/C++ тесно связаны
Имя массива является синонимом расположения его начального элемента
int arr[10];
int *p = arr; // эквивалентно int *p = &arr[0];
Индексация элементов массива возможна с помощью указателей и адресной арифметики
Описание слайда:
Указатели и массивы Указатели и массивы в C/C++ тесно связаны Имя массива является синонимом расположения его начального элемента int arr[10]; int *p = arr; // эквивалентно int *p = &arr[0]; Индексация элементов массива возможна с помощью указателей и адресной арифметики

Слайд 127





Адресная арифметика
Если p – указатель на некоторый элемент массива, то 
p+1 – указатель на следующий элемент
p-1 – указатель на предыдущий элемент
p+j – указатель на j-й элемент после p
p[j] разыменовывает j-й элемент относительно p
Если p и q – указатели на некоторые элементы одного массива, то
p–q - равно количеству элементов после q, которое необходимо добавить, чтобы получить p
p<q принимает значение 1, если p указывает на элемент, предшествующий q, в противном случае - 0
p==q, принимает значение 1 если p и q указывают на один и тот же элемент, в противном случае - 0
Описание слайда:
Адресная арифметика Если p – указатель на некоторый элемент массива, то p+1 – указатель на следующий элемент p-1 – указатель на предыдущий элемент p+j – указатель на j-й элемент после p p[j] разыменовывает j-й элемент относительно p Если p и q – указатели на некоторые элементы одного массива, то p–q - равно количеству элементов после q, которое необходимо добавить, чтобы получить p p<q принимает значение 1, если p указывает на элемент, предшествующий q, в противном случае - 0 p==q, принимает значение 1 если p и q указывают на один и тот же элемент, в противном случае - 0

Слайд 128





Адресная арифметика в действии
Описание слайда:
Адресная арифметика в действии

Слайд 129





Примеры
Описание слайда:
Примеры

Слайд 130





Указатели на char
Строковые константы – массивы символов с завершающим нулем
Передача строковой константы в функцию (напр. printf) осуществляется путем передачи указателя на ее начальный элемент
Описание слайда:
Указатели на char Строковые константы – массивы символов с завершающим нулем Передача строковой константы в функцию (напр. printf) осуществляется путем передачи указателя на ее начальный элемент

Слайд 131





Особенности
Присваивание символьных указателей, не копирует строки
char * p = “Hello”;
char * p1 = p; // p и p1 указывают на одно и то же место в памяти
Символьный массив и символьный указатель – различные понятия
char msg[] = “Hello”;	// массив
Символы внутри массива могут изменяться
msg всегда указывает на одно и то же место в памяти
char *pmsg = “Hello”;	// указатель
Попытка изменить символы через pmsg приведет к неопределенному поведению
pmsg – указатель, можно присвоить ему другое значение в ходе работы программы
Описание слайда:
Особенности Присваивание символьных указателей, не копирует строки char * p = “Hello”; char * p1 = p; // p и p1 указывают на одно и то же место в памяти Символьный массив и символьный указатель – различные понятия char msg[] = “Hello”; // массив Символы внутри массива могут изменяться msg всегда указывает на одно и то же место в памяти char *pmsg = “Hello”; // указатель Попытка изменить символы через pmsg приведет к неопределенному поведению pmsg – указатель, можно присвоить ему другое значение в ходе работы программы

Слайд 132





Массивы указателей
Указатели, как и другие переменные можно группировать в массивы
int main(int argc, char* argv[])
const char * a[] = {“Hello”, “World!”};
printf(“%s %s\n”, a[0], a[1]);
a[0] = “Goodbye”;
Массивы указателей могут использоваться как альтернатива двумерных массивов
Описание слайда:
Массивы указателей Указатели, как и другие переменные можно группировать в массивы int main(int argc, char* argv[]) const char * a[] = {“Hello”, “World!”}; printf(“%s %s\n”, a[0], a[1]); a[0] = “Goodbye”; Массивы указателей могут использоваться как альтернатива двумерных массивов

Слайд 133





Указатели на указатели
В C и C++ возможны указатели, ссылающиеся на другие указатели
char arr[] = “Hello”;
char *parr = arr;
char **pparr = &parr;	// pparr – хранит адрес указателя parr
(*pparr)[0] = ‘h’; // arr = “hello”
pparr[0][1] = ‘E’; // arr = “hEllo”;
Описание слайда:
Указатели на указатели В C и C++ возможны указатели, ссылающиеся на другие указатели char arr[] = “Hello”; char *parr = arr; char **pparr = &parr; // pparr – хранит адрес указателя parr (*pparr)[0] = ‘h’; // arr = “hello” pparr[0][1] = ‘E’; // arr = “hEllo”;

Слайд 134





Инкремент и декремент указателя
Когда указатель ссылается на определенный элемент массива, имеют смысл операции инкремента и декремента указателя
char str[] = “Hello, world!”;
char *p = str;// p указывает на символ H
p++; // p указывает на символ e
*p = ‘E’; // заменяем символ e на E
Описание слайда:
Инкремент и декремент указателя Когда указатель ссылается на определенный элемент массива, имеют смысл операции инкремента и декремента указателя char str[] = “Hello, world!”; char *p = str;// p указывает на символ H p++; // p указывает на символ e *p = ‘E’; // заменяем символ e на E

Слайд 135


Язык программирования C++, слайд №135
Описание слайда:

Слайд 136





Указатели и динамическая память
Часто возможны ситуации, когда размер и количество блоков памяти, необходимых программе, не известны заранее
В этом случае прибегают к использованию динамически распределяемой памяти
Приложение может запрашивать блоки памяти необходимого размера из области, называемой кучей (heap)
Как только блок памяти становится не нужен, его освобождают, возвращая память в кучу
Описание слайда:
Указатели и динамическая память Часто возможны ситуации, когда размер и количество блоков памяти, необходимых программе, не известны заранее В этом случае прибегают к использованию динамически распределяемой памяти Приложение может запрашивать блоки памяти необходимого размера из области, называемой кучей (heap) Как только блок памяти становится не нужен, его освобождают, возвращая память в кучу

Слайд 137





Операторы new и delete
В состав языка C++ вошли операторы new и delete, осуществляющие работу с динамической памятью на уровне языка
Оператор new выделяет память под элемент или массив элементов
Тип *p = new Тип()
Тип *p = new Тип(инициализатор,...)
Тип *p = new Тип[кол-во элементов]
Оператор delete освобождает память, выделенную ранее оператором new
delete pObject;
delete [] pArray;
Описание слайда:
Операторы new и delete В состав языка C++ вошли операторы new и delete, осуществляющие работу с динамической памятью на уровне языка Оператор new выделяет память под элемент или массив элементов Тип *p = new Тип() Тип *p = new Тип(инициализатор,...) Тип *p = new Тип[кол-во элементов] Оператор delete освобождает память, выделенную ранее оператором new delete pObject; delete [] pArray;

Слайд 138





Прочие средства работы с динамической памятью
В стандартной библиотеке языка C для работы с динамической памятью служат функции:
malloc
calloc
realloc
free
Существуют средства работы с динамической памятью, зависящие от используемой ОС или используемых компонентов
Описание слайда:
Прочие средства работы с динамической памятью В стандартной библиотеке языка C для работы с динамической памятью служат функции: malloc calloc realloc free Существуют средства работы с динамической памятью, зависящие от используемой ОС или используемых компонентов

Слайд 139





Функции memcpy, memset и memmove
Функция memcpy осуществляет копирование блока памяти из одного адреса в другой
void memcpy(void *dst, const void *src, size_t count)
Функция memmove аналогична memcpy, но корректно работает, если блоки перекрываются
void memmove(void *dst, const void *src, size_t count)
Функция memset заполняет область памяти определенным значением типа char
void memset(void *dst, int c, size_t count)
Описание слайда:
Функции memcpy, memset и memmove Функция memcpy осуществляет копирование блока памяти из одного адреса в другой void memcpy(void *dst, const void *src, size_t count) Функция memmove аналогична memcpy, но корректно работает, если блоки перекрываются void memmove(void *dst, const void *src, size_t count) Функция memset заполняет область памяти определенным значением типа char void memset(void *dst, int c, size_t count)

Слайд 140





Пример
Описание слайда:
Пример

Слайд 141





Указатели на структуры и объединения
Указатели на структуры объявляются аналогично указателям на другие типы
Для доступа к элементам структуры может применяться оператор ->
struct Point
{
	int x, y;
};

Point p = {10, 20};
Point *pPoint = &p;
(*pPoint).x = 1;
pPoint->y = 2;
Описание слайда:
Указатели на структуры и объединения Указатели на структуры объявляются аналогично указателям на другие типы Для доступа к элементам структуры может применяться оператор -> struct Point { int x, y; }; Point p = {10, 20}; Point *pPoint = &p; (*pPoint).x = 1; pPoint->y = 2;

Слайд 142





Правила корректной работы с динамической памятью
Объекты, выделенные при помощи оператора new должны быть удалены при помощи оператора delete
MyType * pObj = new MyType;
delete pObj;
Массивы объектов, выделенные при помощи оператора new [] должны быть удалены при помощи оператора delete []
MyType * pArray = new MyType[N];
delete [] pArray;
Блоки памяти, выделенные при помощи функции malloc (realloc, calloc) должны быть освобождены при помощи функции free
void * p = malloc(1000);
free(p);
Использование «непарных» средств освобождения памяти приведет к неопределенному поведению
Описание слайда:
Правила корректной работы с динамической памятью Объекты, выделенные при помощи оператора new должны быть удалены при помощи оператора delete MyType * pObj = new MyType; delete pObj; Массивы объектов, выделенные при помощи оператора new [] должны быть удалены при помощи оператора delete [] MyType * pArray = new MyType[N]; delete [] pArray; Блоки памяти, выделенные при помощи функции malloc (realloc, calloc) должны быть освобождены при помощи функции free void * p = malloc(1000); free(p); Использование «непарных» средств освобождения памяти приведет к неопределенному поведению

Слайд 143





Проблемы ручного управления памятью
«Висячие ссылки» (dangling pointer)
После удаления объекта все указатели на него становятся «висячими»
Область памяти может быть отдана ОС и стать недоступной, либо использоваться новым объектом
Разыменование или попытка повторного удаления приведет либо к аварийной остановке программы, либо к неопределенному поведению
Причина возникновения: неправильная оценка времени жизни объекта – команда удаления объекта вызывается до окончания его использования в программе
Описание слайда:
Проблемы ручного управления памятью «Висячие ссылки» (dangling pointer) После удаления объекта все указатели на него становятся «висячими» Область памяти может быть отдана ОС и стать недоступной, либо использоваться новым объектом Разыменование или попытка повторного удаления приведет либо к аварийной остановке программы, либо к неопределенному поведению Причина возникновения: неправильная оценка времени жизни объекта – команда удаления объекта вызывается до окончания его использования в программе

Слайд 144





Проблемы ручного управления памятью (продолжение)
Утечка памяти (Memory Leak)
Причины:
Программист не удалил объект после завершения использования
Ссылающемуся на объект указателю присвоено новое значение, тогда как на объект нет других ссылок
Объект становится недоступен программно, но продолжает занимать память
Следствие
Программа все больше и больше потребляет памяти, замедляя работу системы, пока не исчерпает доступный объем адресного пространства и не завершится с ошибкой
Описание слайда:
Проблемы ручного управления памятью (продолжение) Утечка памяти (Memory Leak) Причины: Программист не удалил объект после завершения использования Ссылающемуся на объект указателю присвоено новое значение, тогда как на объект нет других ссылок Объект становится недоступен программно, но продолжает занимать память Следствие Программа все больше и больше потребляет памяти, замедляя работу системы, пока не исчерпает доступный объем адресного пространства и не завершится с ошибкой

Слайд 145





Примеры некорректной работы с динамической памятью
Описание слайда:
Примеры некорректной работы с динамической памятью

Слайд 146





Еще примеры некорректной работы с динамической памятью
Описание слайда:
Еще примеры некорректной работы с динамической памятью

Слайд 147





Как не прострелить себе ногу, программируя на C++
Работа с указателями – сильная сторона C++, требующая большой внимательности и ответственности
Сведите к минимуму ручную работу с указателями и динамической памятью
Используйте контейнеры стандартной библиотеки C++ как альтернативу динамическим массивам
Используйте классы стандартных «умных указателей» для владения объектами в динамической памяти
Используйте иные проверенные временем библиотеки (например boost)
Пишите свои умные обертки, автоматизирующие владение ресурами
Описание слайда:
Как не прострелить себе ногу, программируя на C++ Работа с указателями – сильная сторона C++, требующая большой внимательности и ответственности Сведите к минимуму ручную работу с указателями и динамической памятью Используйте контейнеры стандартной библиотеки C++ как альтернативу динамическим массивам Используйте классы стандартных «умных указателей» для владения объектами в динамической памяти Используйте иные проверенные временем библиотеки (например boost) Пишите свои умные обертки, автоматизирующие владение ресурами

Слайд 148





А как у них?
Есть ЯВУ, использующие сборку мусора (Garbage collection), например Java, C#, JavaScript, D, Lisp, ActionScript, Objective C и др.
Освобождение памяти от неиспользуемых объектов возлагается на среду исполнения
Свобода программиста по работе с указателями, адресной арифметикой в таких языках либо отсутствует, либо сильно ограничена
Возможны кратковременные замедления в работе программы в неопределенные моменты на время сборки мусора
Эффективная работа сборщика мусора возможна только при достаточном количестве свободной памяти
Описание слайда:
А как у них? Есть ЯВУ, использующие сборку мусора (Garbage collection), например Java, C#, JavaScript, D, Lisp, ActionScript, Objective C и др. Освобождение памяти от неиспользуемых объектов возлагается на среду исполнения Свобода программиста по работе с указателями, адресной арифметикой в таких языках либо отсутствует, либо сильно ограничена Возможны кратковременные замедления в работе программы в неопределенные моменты на время сборки мусора Эффективная работа сборщика мусора возможна только при достаточном количестве свободной памяти

Слайд 149





Автоматический сборщик мусора – не панацея
Сборка мусора автоматизирует лишь работу с памятью, но не с другими ресурами (файлы, подключения к БД)
В некоторых языках есть возможность выполнить некоторый код непосредственно перед удалением объекта (финализатор) сборщиком мусора
Для управления ресурсами не годится, т.к. объект может использоваться (либо не удаляться сборщиком мусора) гораздо дольше, чем владеемый им ресурс, поэтому ресурсами приходится управлять вручную
Утечки памяти все равно возможны, если ссылка на ненужный более объект хранится в используемом объекте
В некоторых языках есть слабые ссылки
Описание слайда:
Автоматический сборщик мусора – не панацея Сборка мусора автоматизирует лишь работу с памятью, но не с другими ресурами (файлы, подключения к БД) В некоторых языках есть возможность выполнить некоторый код непосредственно перед удалением объекта (финализатор) сборщиком мусора Для управления ресурсами не годится, т.к. объект может использоваться (либо не удаляться сборщиком мусора) гораздо дольше, чем владеемый им ресурс, поэтому ресурсами приходится управлять вручную Утечки памяти все равно возможны, если ссылка на ненужный более объект хранится в используемом объекте В некоторых языках есть слабые ссылки

Слайд 150





Ссылки
Описание слайда:
Ссылки

Слайд 151





Ссылки
Ссылку можно рассматривать как еще одно имя объекта
Синтаксис
<Тип> & означает ссылку на <Тип>
Применение
Задание параметров функций
Перегрузка операций
Описание слайда:
Ссылки Ссылку можно рассматривать как еще одно имя объекта Синтаксис <Тип> & означает ссылку на <Тип> Применение Задание параметров функций Перегрузка операций

Слайд 152





Ссылки в качестве параметров функций
Функция принимает не копию аргумента, а ссылку на него
При сложных типах аргументов (классы, структуры) это может дать прирост в скорости вызова функции
Не тратится время на создании копии
Простые типы, как правило, эффективнее передавать по значению
char, int, float, double
Изменение значения формального параметра внутри функции приводит к изменению значения переданного аргумента
Альтернативный способ возврата значения из функции
Возврат нескольких значений одновременно
Описание слайда:
Ссылки в качестве параметров функций Функция принимает не копию аргумента, а ссылку на него При сложных типах аргументов (классы, структуры) это может дать прирост в скорости вызова функции Не тратится время на создании копии Простые типы, как правило, эффективнее передавать по значению char, int, float, double Изменение значения формального параметра внутри функции приводит к изменению значения переданного аргумента Альтернативный способ возврата значения из функции Возврат нескольких значений одновременно

Слайд 153





Константные ссылки в качестве параметров функций
Параметр, переданный в функцию по константной ссылке, доступен внутри нее только для чтения
Если функция не изменяет значение своего аргумента, то имеет смысл передавать его по константной ссылке
Простые типы данных следует передавать по значению
Описание слайда:
Константные ссылки в качестве параметров функций Параметр, переданный в функцию по константной ссылке, доступен внутри нее только для чтения Если функция не изменяет значение своего аргумента, то имеет смысл передавать его по константной ссылке Простые типы данных следует передавать по значению

Слайд 154





Пример 1
Описание слайда:
Пример 1

Слайд 155





Пример 2
Описание слайда:
Пример 2

Слайд 156





Инициализация ссылки
Ссылка должна быть обязательно проинициализирована
Должен существовать объект на который она ссылается
Синтаксис
Тип & идентификатор = значение;
Инициализация ссылки совершенно отличается от операции присваивания
Будучи проинициализированной, присваивание ссылке нового значения изменяет значение ссылаемого объекта, а не значение ссылки
Описание слайда:
Инициализация ссылки Ссылка должна быть обязательно проинициализирована Должен существовать объект на который она ссылается Синтаксис Тип & идентификатор = значение; Инициализация ссылки совершенно отличается от операции присваивания Будучи проинициализированной, присваивание ссылке нового значения изменяет значение ссылаемого объекта, а не значение ссылки

Слайд 157





Пример
Описание слайда:
Пример

Слайд 158





Ссылки на временные объекты
При инициализации ссылки объектом  другого типа компилятор создает временный объект нужного типа и использует его для инициализации ссылки
На данный временный объект может ссылаться только константная ссылка
То же самое происходит при инициализации ссылки значением константы
Изменение значения объекта в данном случае не отражается на значении временного объекта
Время жизни временного объекта равно области видимости созданной ссылки
Описание слайда:
Ссылки на временные объекты При инициализации ссылки объектом другого типа компилятор создает временный объект нужного типа и использует его для инициализации ссылки На данный временный объект может ссылаться только константная ссылка То же самое происходит при инициализации ссылки значением константы Изменение значения объекта в данном случае не отражается на значении временного объекта Время жизни временного объекта равно области видимости созданной ссылки

Слайд 159





Пример 1
Описание слайда:
Пример 1

Слайд 160





Пример 2
Описание слайда:
Пример 2

Слайд 161





Пространства имен
Описание слайда:
Пространства имен

Слайд 162





Пространства имен
Пространства имен позволяют логически сгруппировать классы, переменные и функции в некоторые именованные области
Позволяют избежать конфликта имен идентификаторов в различных модулях проекта
Разбивают программу на функциональные единицы
Доступ к идентификатору внутри пространства имен:
<namespace>::<identifier>
Либо:
using namespace <namespace>; <identifier>;
Либо:
using <namespace>::<identifier>; <identifier>;
Не рекомендуется использовать using namespace в заголовочных файлах
Описание слайда:
Пространства имен Пространства имен позволяют логически сгруппировать классы, переменные и функции в некоторые именованные области Позволяют избежать конфликта имен идентификаторов в различных модулях проекта Разбивают программу на функциональные единицы Доступ к идентификатору внутри пространства имен: <namespace>::<identifier> Либо: using namespace <namespace>; <identifier>; Либо: using <namespace>::<identifier>; <identifier>; Не рекомендуется использовать using namespace в заголовочных файлах

Слайд 163


Язык программирования C++, слайд №163
Описание слайда:

Слайд 164





Стандартная библиотека шаблонов STL
Описание слайда:
Стандартная библиотека шаблонов STL

Слайд 165





Стандартная библиотека шаблонов (STL)
Программная библиотека, содержащая большое количество готового к использованию обобщенного кода
Контейнеры
Итераторы
Алгоритмы
Умные указатели
Поддержка многопоточности, случайных чисел
Потоки ввода/вывода
Поддержка функционального программирования
И многое другое
Все контейнеры, алгоритмы и итераторы в STL объявлены в пространстве имен std
Стандарт запрещает программисту объявлять свои типы в данном пространстве имен
Описание слайда:
Стандартная библиотека шаблонов (STL) Программная библиотека, содержащая большое количество готового к использованию обобщенного кода Контейнеры Итераторы Алгоритмы Умные указатели Поддержка многопоточности, случайных чисел Потоки ввода/вывода Поддержка функционального программирования И многое другое Все контейнеры, алгоритмы и итераторы в STL объявлены в пространстве имен std Стандарт запрещает программисту объявлять свои типы в данном пространстве имен

Слайд 166





Контейнеры
Классы, предназначенные для хранения элементов определенного типа
STL содержит классы обобщенных реализаций различных контейнеров, которые можно использовать с элементами различных типов
В STL поддерживаются 2 вида контейнеров
Последовательные
Ассоциативные
Описание слайда:
Контейнеры Классы, предназначенные для хранения элементов определенного типа STL содержит классы обобщенных реализаций различных контейнеров, которые можно использовать с элементами различных типов В STL поддерживаются 2 вида контейнеров Последовательные Ассоциативные

Слайд 167





Основные контейнеры STL
Последовательные контейнеры
Строка (basic_string, string, wstring)
Вектор (vector)
Двусвязный список (list)
Двусторонняя очередь (deque)
Ассоциативные контейнеры
Отображение (map, multimap, unordered_map, unordered_multimap)
Множество (set, multiset, unordered_set, unordered_multiset)
Контейнеры-адаптеры
Стек (stack)
Очередь (queue)
Очередь с приоритетом (priority_queue)
Описание слайда:
Основные контейнеры STL Последовательные контейнеры Строка (basic_string, string, wstring) Вектор (vector) Двусвязный список (list) Двусторонняя очередь (deque) Ассоциативные контейнеры Отображение (map, multimap, unordered_map, unordered_multimap) Множество (set, multiset, unordered_set, unordered_multiset) Контейнеры-адаптеры Стек (stack) Очередь (queue) Очередь с приоритетом (priority_queue)

Слайд 168





Строка std::string
Контейнер, предназначенный для хранения строк произвольной длины
В качестве элементов строк могут выступать элементы типа char (string), wchar_t (wstring) или определяемые пользователем типы (basic_string)
Достоинства:
Автоматизация управления памятью
Набор операций для работы со строками
Для работы с данным классом строк необходимо подключить заголовочный файл <string>
Описание слайда:
Строка std::string Контейнер, предназначенный для хранения строк произвольной длины В качестве элементов строк могут выступать элементы типа char (string), wchar_t (wstring) или определяемые пользователем типы (basic_string) Достоинства: Автоматизация управления памятью Набор операций для работы со строками Для работы с данным классом строк необходимо подключить заголовочный файл <string>

Слайд 169





Создание строки
Описание слайда:
Создание строки

Слайд 170





Размер и вместимость
Описание слайда:
Размер и вместимость

Слайд 171





Сравнение строк
Описание слайда:
Сравнение строк

Слайд 172





Конкатенация строк
Описание слайда:
Конкатенация строк

Слайд 173





Извлечение подстроки
Описание слайда:
Извлечение подстроки

Слайд 174





Поиск внутри строки
Описание слайда:
Поиск внутри строки

Слайд 175





Замена внутри строки
Описание слайда:
Замена внутри строки

Слайд 176





string_view
Описание слайда:
string_view

Слайд 177





string_view
Объект, ссылающийся на неизменную последовательность символов в памяти
Не владеет символьными данными
При разрушении string_view массив не удаляется
После разрушения массива символов использовать ссылавшийся на него string_view нельзя
Легковесный
Как правило, указатель на начало + длина
Описание слайда:
string_view Объект, ссылающийся на неизменную последовательность символов в памяти Не владеет символьными данными При разрушении string_view массив не удаляется После разрушения массива символов использовать ссылавшийся на него string_view нельзя Легковесный Как правило, указатель на начало + длина

Слайд 178





Конструирование string_view
Описание слайда:
Конструирование string_view

Слайд 179





Пример
Описание слайда:
Пример

Слайд 180





Вектор std::vector
Контейнер для хранения динамического массива элементов произвольного типа
Автоматизация процесса управления памятью
Везде, где возможно, рекомендуется использовать класс vector как альтернативу динамическому выделению массивов объектов при помощи оператора new []
К элементам массива предоставляется индексированный доступ
Для использования данного класса необходимо подключить заголовочный файл <vector>
Описание слайда:
Вектор std::vector Контейнер для хранения динамического массива элементов произвольного типа Автоматизация процесса управления памятью Везде, где возможно, рекомендуется использовать класс vector как альтернативу динамическому выделению массивов объектов при помощи оператора new [] К элементам массива предоставляется индексированный доступ Для использования данного класса необходимо подключить заголовочный файл <vector>

Слайд 181





Пример
Описание слайда:
Пример

Слайд 182


Язык программирования C++, слайд №182
Описание слайда:

Слайд 183





Двусвязный список std::list
Реализовывает двусвязный список элементов произвольного типа
К элементам списка осуществляется последовательный доступ при помощи итераторов
Вставка и удаление элементов из произвольного места списка осуществляется за постоянное время
Для начала работы с данным контейнером необходимо подключить заголовочный файл <list>
Описание слайда:
Двусвязный список std::list Реализовывает двусвязный список элементов произвольного типа К элементам списка осуществляется последовательный доступ при помощи итераторов Вставка и удаление элементов из произвольного места списка осуществляется за постоянное время Для начала работы с данным контейнером необходимо подключить заголовочный файл <list>

Слайд 184





Пример
Описание слайда:
Пример

Слайд 185


Язык программирования C++, слайд №185
Описание слайда:

Слайд 186





Двусторонняя очередь (double-ended queue) std::deque
Аналогична вектору, но обеспечивает эффективную вставку и удаление элементов не только в конце, но и в начале очереди
В отличие от вектора не гарантируется последовательное хранение элементов в памяти
Гарантируется константный доступ к элементу по его индексу
Для использования необходимо подключить заголовочный файл <deque>
Описание слайда:
Двусторонняя очередь (double-ended queue) std::deque Аналогична вектору, но обеспечивает эффективную вставку и удаление элементов не только в конце, но и в начале очереди В отличие от вектора не гарантируется последовательное хранение элементов в памяти Гарантируется константный доступ к элементу по его индексу Для использования необходимо подключить заголовочный файл <deque>

Слайд 187





Классы std::map и std::multimap
Ассоциативный контейнер, хранящий пары «ключ» - «значение»
Позволяет отображать элементы одного типа в элементы другого или того же самого типа
map – все ключи уникальные
multimap – допускается дублирование ключей
Для подключения данных классов необходимо подключить заголовочный файл <map>
Требования к ключам:
Наличие операции отношения <
Описание слайда:
Классы std::map и std::multimap Ассоциативный контейнер, хранящий пары «ключ» - «значение» Позволяет отображать элементы одного типа в элементы другого или того же самого типа map – все ключи уникальные multimap – допускается дублирование ключей Для подключения данных классов необходимо подключить заголовочный файл <map> Требования к ключам: Наличие операции отношения <

Слайд 188





Пример
Описание слайда:
Пример

Слайд 189





Пример – подсчет частоты встречаемости символов
Описание слайда:
Пример – подсчет частоты встречаемости символов

Слайд 190





Классы std::unordered_map и std::unordered_multimap
Ассоциативный контейнер, хранящий пары «ключ» - «значение»
Элементы хранятся не отсортированы никоим образом, но сгруппированы в bucket-ы согласно хеш-значению ключей
unordered_map – все ключи уникальные
unordered_multimap – допускается дублирование ключей
Для подключения данных классов необходимо подключить заголовочный файл <unordered_map>
Требования к ключам:
Наличие операции сравнения ==
Возможность вычислить хеш от значения ключа
Описание слайда:
Классы std::unordered_map и std::unordered_multimap Ассоциативный контейнер, хранящий пары «ключ» - «значение» Элементы хранятся не отсортированы никоим образом, но сгруппированы в bucket-ы согласно хеш-значению ключей unordered_map – все ключи уникальные unordered_multimap – допускается дублирование ключей Для подключения данных классов необходимо подключить заголовочный файл <unordered_map> Требования к ключам: Наличие операции сравнения == Возможность вычислить хеш от значения ключа

Слайд 191


Язык программирования C++, слайд №191
Описание слайда:

Слайд 192


Язык программирования C++, слайд №192
Описание слайда:

Слайд 193


Язык программирования C++, слайд №193
Описание слайда:

Слайд 194





Классы множеств std::set и std::multiset
Ассоциативный контейнер, хранящий множество элементов определенного типа
set – дублирование элементов не допускается
multiset – дублирование элементов допускается
Для использования данных классов необходимо подключить заголовочный файл <set>
Требования к элементам – наличие операции отношения <
Возможно реализовать проверку упорядоченности иным способом при помощи объекта-параметра шаблона
Описание слайда:
Классы множеств std::set и std::multiset Ассоциативный контейнер, хранящий множество элементов определенного типа set – дублирование элементов не допускается multiset – дублирование элементов допускается Для использования данных классов необходимо подключить заголовочный файл <set> Требования к элементам – наличие операции отношения < Возможно реализовать проверку упорядоченности иным способом при помощи объекта-параметра шаблона

Слайд 195





Пример
Описание слайда:
Пример

Слайд 196





Итераторы
Итератор – объект, позволяющий программисту осуществлять перебор элементов контейнера вне зависимости от деталей его реализации
Например, осуществлять вставку диапазона элементов одного контейнера в другой
Итераторы используются в STL для доступа к элементам контейнеров
Обобщенные реализации алгоритмов используют итераторы для обработки элементов контейнеров
Итератор – связующее звено между контейнером и алгоритмом
Описание слайда:
Итераторы Итератор – объект, позволяющий программисту осуществлять перебор элементов контейнера вне зависимости от деталей его реализации Например, осуществлять вставку диапазона элементов одного контейнера в другой Итераторы используются в STL для доступа к элементам контейнеров Обобщенные реализации алгоритмов используют итераторы для обработки элементов контейнеров Итератор – связующее звено между контейнером и алгоритмом

Слайд 197





Алгоритмы
Обобщенные функции, реализующие типичные алгоритмы над элементами контейнеров
Сортировка, поиск, поэлементная обработка
Алгоритмы в STL не работают с контейнерами напрямую
Вместо этого алгоритмы используют итераторы, задающие определенные элементы или диапазоны элементов контейнера
Для работы с алгоритмами STL необходимо подключить заголовочный файл <algorithm>
Описание слайда:
Алгоритмы Обобщенные функции, реализующие типичные алгоритмы над элементами контейнеров Сортировка, поиск, поэлементная обработка Алгоритмы в STL не работают с контейнерами напрямую Вместо этого алгоритмы используют итераторы, задающие определенные элементы или диапазоны элементов контейнера Для работы с алгоритмами STL необходимо подключить заголовочный файл <algorithm>

Слайд 198





Пример: сортировка массива с использованием STL
Описание слайда:
Пример: сортировка массива с использованием STL

Слайд 199


Язык программирования C++, слайд №199
Описание слайда:

Слайд 200





Пример
Описание слайда:
Пример

Слайд 201


Язык программирования C++, слайд №201
Описание слайда:

Слайд 202


Язык программирования C++, слайд №202
Описание слайда:

Слайд 203


Язык программирования C++, слайд №203
Описание слайда:

Слайд 204





Контейнеры STL и умные указатели
Контейнеры STL автоматически освобождают занимаемую своими элементами память
std::vector – рекомендуемая альтернатива динамическому массиву
std::unique_ptr – умный указатель
std::shared_ptr – умный указатель с подсчетом ссылок
Прочее
boost::scoped_ptr 
boost::intrusive_ptr
boost::scoped_array
boost::shared_array
Описание слайда:
Контейнеры STL и умные указатели Контейнеры STL автоматически освобождают занимаемую своими элементами память std::vector – рекомендуемая альтернатива динамическому массиву std::unique_ptr – умный указатель std::shared_ptr – умный указатель с подсчетом ссылок Прочее boost::scoped_ptr boost::intrusive_ptr boost::scoped_array boost::shared_array

Слайд 205


Язык программирования C++, слайд №205
Описание слайда:

Слайд 206





Ссылки
Алгоритм выбора контейнера STL
Описание слайда:
Ссылки Алгоритм выбора контейнера STL



Похожие презентации
Mypresentation.ru
Загрузить презентацию