🗊 Презентация Адаптеры контейнеров. Работа со словарём. (Лекция 6)

Нажмите для полного просмотра!
Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №1 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №2 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №3 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №4 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №5 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №6 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №7 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №8 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №9 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №10 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №11 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №12 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №13 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №14 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №15 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №16 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №17 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №18 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №19 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №20 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №21 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №22 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №23 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №24 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №25 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №26 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №27 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №28 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №29 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №30 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №31 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №32 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №33 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №34 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №35 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №36 Адаптеры контейнеров. Работа со словарём. (Лекция 6), слайд №37

Содержание

Вы можете ознакомиться и скачать презентацию на тему Адаптеры контейнеров. Работа со словарём. (Лекция 6). Доклад-сообщение содержит 37 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1


Адаптеры. Работа со словарём
Описание слайда:
Адаптеры. Работа со словарём

Слайд 2


Адаптеры контейнеров Рассмотрим специализированные последовательные контейнеры – стек, очередь и очередь с приоритетами. Они не являются...
Описание слайда:
Адаптеры контейнеров Рассмотрим специализированные последовательные контейнеры – стек, очередь и очередь с приоритетами. Они не являются самостоятельными контейнерными классами, а реализованы на основе рассмотренных выше классов (вектора, двусторонней очереди и списка), поэтому они называются адаптерами контейнеров.

Слайд 3


Стек (stack) – структура данных, которая допускает только две операции, изменяющие ее размер: push (добавление элемен­та в конце) и pop (удаление...
Описание слайда:
Стек (stack) – структура данных, которая допускает только две операции, изменяющие ее размер: push (добавление элемен­та в конце) и pop (удаление элемента в конце). Стек работает по принципу «последний пришел – первый ушел» (LIFO от английского Last In – First Out). Кроме push и pop для стека определены также функции-члены empty и size, имеющие обычное значение, и top (вместо back) для доступа к последнему элементу. Стек может быть реализован с помощью каждого из трех последова­тельных контейнеров STL: вектора, двусторонней очереди и списка. => Cтек – это не новый тип контейнера, а особый вариан­т вектора, двусторонней очереди либо списка, отсюда и происхождение термина адаптер контейнера.

Слайд 4


Стек (stack) В качестве примера используем стек для чтения последовательности целых чисел и отображения их в обратном порядке. Любой нецифровой...
Описание слайда:
Стек (stack) В качестве примера используем стек для чтения последовательности целых чисел и отображения их в обратном порядке. Любой нецифровой символ будет признаком конца ввода. В следующей программе стек реа­лизован вектором, но программа также будет работать, если мы заменим всюду vector на deque или list. Кроме того, программа показывает, как рабо­тают функции-члены empty, top и size. #include #include #include ……..

Слайд 5


int main1() int main1() { stack S; int x; cout > x) S.push(x); while (!S.empty()) { x = S.top(); cout
Описание слайда:
int main1() int main1() { stack S; int x; cout > x) S.push(x); while (!S.empty()) { x = S.top(); cout

Слайд 6


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

Слайд 7


int main2() int main2() { stack S, T, U; S.push(10); S.push(20); S.push(30); cout
Описание слайда:
int main2() int main2() { stack S, T, U; S.push(10); S.push(20); S.push(30); cout

Слайд 8


Вывод программы: Вывод программы: Pushed onto S: 10 20 30 After T = S; we have S == T Pushed onto U: 10 21 We now have S < U Лексикографическое...
Описание слайда:
Вывод программы: Вывод программы: Pushed onto S: 10 20 30 After T = S; we have S == T Pushed onto U: 10 21 We now have S < U Лексикографическое сравнение стеков (последнее сравнение) Стек S < Стек U Первыми сравниваются элементы внизу стека. Поскольку оба они равны 10, происходит сравнение следующих за ними элементов 20 и 21. В нашем примере S < U, потому что 20 < 21. Это сравнение выполняется таким же образом, как и сравнение строк, только для строк мы начинаем сравнение с первых символов, а для стека – с нижних элементов.

Слайд 9


Очередь (queue) – структура данных, в которую можно добавлять элементы с одного конца, – сзади, и удалять с другого конца, – спереди. Мы можем узнать...
Описание слайда:
Очередь (queue) – структура данных, в которую можно добавлять элементы с одного конца, – сзади, и удалять с другого конца, – спереди. Мы можем узнать и изменить значения элементов в начале и в конце очереди: В отличие от стека очередь нельзя представить с помощью вектора, по­скольку у вектора отсутствует операция pop_front. Например, нельзя написать queue Q; // Ошибка!!! Но если vector заменить на deque или list, такая строчка станет допустимой. Функции-члены push и pop работают так, как показано на рисунке.

Слайд 10


Использование очереди. Функции push, pop, back и front #include #include #include int main3() { queue Q; Q.push(10); Q.push(20); Q.push(30); cout
Описание слайда:
Использование очереди. Функции push, pop, back и front #include #include #include int main3() { queue Q; Q.push(10); Q.push(20); Q.push(30); cout

Слайд 11


Очередь – продолжение программы Вывод программы: After pushing 10, 20 and 30: Q.front() = 10 Q.back() = 30 After Q.pop(): Q.front() = 20...
Описание слайда:
Очередь – продолжение программы Вывод программы: After pushing 10, 20 and 30: Q.front() = 10 Q.back() = 30 After Q.pop(): Q.front() = 20 Функции-члены empty и size класса queue аналогичны этим функциям для класса stack, так же как и операторы присваивания и сравнения. Срав­нение начинается с передних элементов; если они равны, происходит срав­нение следующих, и так далее.

Слайд 12


Очередь с приоритетами (priority queue) - структура данных, из которой, если она не пуста, можно удалить только наибольший элемент. Как и для стеков,...
Описание слайда:
Очередь с приоритетами (priority queue) - структура данных, из которой, если она не пуста, можно удалить только наибольший элемент. Как и для стеков, наиболее важными функциями-членами являются push, pop и top. // Очередь с приоритетами: push, pop, empty и top. #include #include #include #include int main4() { priority_queue P; int x; P.push(123); P.push(51); P.push(1000); P.push(17); while (!P.empty()) { x = P.top(); cout

Слайд 13


В этой программе числа следуют в нисходящем порядке: В этой программе числа следуют в нисходящем порядке: Retrieved element: 1000 Retrieved element:...
Описание слайда:
В этой программе числа следуют в нисходящем порядке: В этой программе числа следуют в нисходящем порядке: Retrieved element: 1000 Retrieved element: 123 Retrieved element: 51 Retrieved element: 17 Поскольку требуется проводить сравнение элементов, шаблон priority_queue имеет третий параметр, как видно из определения очереди с приоритетами P: priority_queue P; Если требуется извлекать элементы в порядке возрастания, мы можем просто заменить less на greater. Существует возможность задания любого правила упо­рядочения элементов.

Слайд 14


Рассмотрим пример, в котором элементы бу­дут извлекаться по порядку возрастания последних цифр в десятичном представлении целых чисел, хранящихся в...
Описание слайда:
Рассмотрим пример, в котором элементы бу­дут извлекаться по порядку возрастания последних цифр в десятичном представлении целых чисел, хранящихся в очереди с приоритетами: Рассмотрим пример, в котором элементы бу­дут извлекаться по порядку возрастания последних цифр в десятичном представлении целых чисел, хранящихся в очереди с приоритетами: #include #include #include #include ……. class CompareLastDigits { public: bool operator()(int x, int y) { return x % 10 > у % 10; } }; Необходимо использовать функциональный объект, по­скольку шаблон priority_queue требует в качестве третьего параметра тип. Этот тип определяет идентификатор CompareLastDigits. Сравнение x % 10 > у % 10 содержит оператор >, в результате чего элемент с наименьшей последней цифрой предшествует другим элементам.

Слайд 15


int main5() int main5() { priority_queue P; int x; P.push(123); P.push(51); P.push(1000); P.push(17); while (!P.empty()) { x = P.top(); cout
Описание слайда:
int main5() int main5() { priority_queue P; int x; P.push(123); P.push(51); P.push(1000); P.push(17); while (!P.empty()) { x = P.top(); cout

Слайд 16


Пары и сравнения Чтобы использовать словари и словари с дубликатами более интересным способом, воспользуемся шаблонным классом pair (пара). #include...
Описание слайда:
Пары и сравнения Чтобы использовать словари и словари с дубликатами более интересным способом, воспользуемся шаблонным классом pair (пара). #include // В заголовочном файле // описывается шаблон pair для хранения пары // «ключ-элемент» int pairs() { pair P(123, 4.5), Q = P; Q = make_pair (122,4.5); cout

Слайд 17


Пары и сравнения Шаблон pair имеет два параметра, представляющих собой типы членов структуры pair: first и second. Для пары определено два...
Описание слайда:
Пары и сравнения Шаблон pair имеет два параметра, представляющих собой типы членов структуры pair: first и second. Для пары определено два конструктора: один должен получать два значения для инициализации элементов, второй (конструктор копирования) – ссылку на другую пару. Конструктора по умолчанию у пары нет, => при создании объекта ему требуется присвоить значение явным образом. Для присваивания значения паре можно использовать функцию make_pair: Q = make_pair(122, 4.5); Но можно присвоить значение Q, написав: Q = pair(122; 4.5);

Слайд 18


Пары и сравнения Для пары определены проверка на равенство (==) и операция сравнения ( Q, но после увеличения Q.first на единицу Р == Q. Р: 123 4.5...
Описание слайда:
Пары и сравнения Для пары определены проверка на равенство (==) и операция сравнения ( Q, но после увеличения Q.first на единицу Р == Q. Р: 123 4.5 Q: 122 4.5 Р > Q After ++Q.first: P == Q

Слайд 19


Сравнения Когда мы пишем операторы сравнения для наших собственных типов, нам необходимо определить только == и , = автоматически определяются в STL...
Описание слайда:
Сравнения Когда мы пишем операторы сравнения для наших собственных типов, нам необходимо определить только == и , = автоматически определяются в STL с помощью следующих четырех шаблонов: template inline bool operator!=(const T1 &x, const T2 &y) { return !(x == y) ; } template inline bool operator>(const T1 &x, const T2 &y) { return у < x; } template inline bool operator

Слайд 20


Сравнения template inline bool operator>=(const T1 &x, const T2 &y) { return !(x < y) ; } Как видно из примера, эти четыре достаточно общих шаблона...
Описание слайда:
Сравнения template inline bool operator>=(const T1 &x, const T2 &y) { return !(x < y) ; } Как видно из примера, эти четыре достаточно общих шаблона определяют !=, >, = через == и

Слайд 21


Пример со словарём Словарь содержит пары (k, d), где k – ключ, a d – сопутствующие данные. Как и для последовательного контейнера, для ассоциативного...
Описание слайда:
Пример со словарём Словарь содержит пары (k, d), где k – ключ, a d – сопутствующие данные. Как и для последовательного контейнера, для ассоциативного контейнера будем использовать итератор i; в этом случае выражение *i будет обозначать пару, в которой (*i).first является ключом, a (*i).second – сопутствующими данными. Например, с помощью итератора i напечатаем все содержимое словаря (ключи в восходящем порядке), применив следующий цикла for. for (i = D.begin(); i != D.end(); i++) cout

Слайд 22


Пример со словарём Заметим, что здесь выводим (*i).second перед (*i)first, так что не нужно планировать, сколько позиций зарезервировать для имен в...
Описание слайда:
Пример со словарём Заметим, что здесь выводим (*i).second перед (*i)first, так что не нужно планировать, сколько позиций зарезервировать для имен в выводе: 54321 Papadimitrou, С. 12345 Smith, J. С таким форматом также удобнее работать при вводе, поскольку в этом случае мы можем прочесть число, пробел и текст до конца строки. Но следует помнить, что этот текст является ключом, хотя и расположен в конце строки. Рассмотрим программу «Телефонный справочник», она будет иметь несложный интерфейс. Данные будут считываться из файла phone.txt. Строчки текста в файле включают номер телефона, один пробел и имя, в перечисленном порядке.

Слайд 23


Пример интерфейса Пример команды Значение ?Johnson, J. Показать телефонный номер абонента Johnson, J. /Johnson, J. Удалить запись об абоненте...
Описание слайда:
Пример интерфейса Пример команды Значение ?Johnson, J. Показать телефонный номер абонента Johnson, J. /Johnson, J. Удалить запись об абоненте Johnson, J. из книги !66331 Peterson, K. Добавить абонента Peterson, К. с номером 66331 * Показать всю телефонную книгу = Записать телефонную книгу в файл phone.txt # Выход Имена являются ключами, хотя и следуют после номеров телефонов.

Слайд 24


Приложение, использующее класс mар (словарь): Телефонный справочник (для VS 2013, UNICOD) #include #include #include #include #include #include...
Описание слайда:
Приложение, использующее класс mар (словарь): Телефонный справочник (для VS 2013, UNICOD) #include #include #include #include #include #include #include #include #include

Слайд 25


Приложение, использующее класс mар (словарь): Телефонный справочник Определение словаря задаётся таким образом: typedef map directype; class...
Описание слайда:
Приложение, использующее класс mар (словарь): Телефонный справочник Определение словаря задаётся таким образом: typedef map directype; class compare_m // функциональный объект { public: bool operator()(const CString s, const CString t)const { return (s < t); } };

Слайд 26


Основные функции, используемые в приложении: Основные функции, используемые в приложении: void ReadInput (directype &D) – чтение данных из файла;...
Описание слайда:
Основные функции, используемые в приложении: Основные функции, используемые в приложении: void ReadInput (directype &D) – чтение данных из файла; void ShowCommands () – создание меню; void ProcessCommands(directype &D) – реализация основных команд приложения. ---------------------------------------------------------- Commands (Меню): ? name :find phone number /name :delete !number name :insert (or update) * :list whole phonebook = :save in file # :exit

Слайд 27


Entries read from file phone.txt: Entries read from file phone.txt: 54321 Smith, P. Из файла прочитали 12345 Johnson, J. две записи. !19723 Shaw, A....
Описание слайда:
Entries read from file phone.txt: Entries read from file phone.txt: 54321 Smith, P. Из файла прочитали 12345 Johnson, J. две записи. !19723 Shaw, A. – ввод новой записи * – вывод справочника 12345 Johnson, J 19723 Shaw, A. В справочнике стало 54321 Smith, P. три записи. /Johnson, J. – удаление записи * – вывод справочника 19723 Shaw, A. После удаления осталось 54321 Smith, P. две записи. ?Shaw, A. – поиск по ключу (по фамилии) Number: 19723 Результат поиска. = – сохранение в файле # – выход из приложения

Слайд 28


void ReadInput (directype &D) - 1 void ReadInput (directype &D) - 1 { int i,k; long nr; CStdioFile f; if (!f.Open(_T("phone.txt"),...
Описание слайда:
void ReadInput (directype &D) - 1 void ReadInput (directype &D) - 1 { int i,k; long nr; CStdioFile f; if (!f.Open(_T("phone.txt"), CFile::modeRead)) { wcout

Слайд 29


void ReadInput (directype &D) - 2 void ReadInput (directype &D) - 2 while (f.ReadString(s)) { nr = _wtoi(s); k = wcslen(s); if (k < 2) break; for (i...
Описание слайда:
void ReadInput (directype &D) - 2 void ReadInput (directype &D) - 2 while (f.ReadString(s)) { nr = _wtoi(s); k = wcslen(s); if (k < 2) break; for (i = 0; i < k; i++) // пропустить пробел { if (!iswalpha(s[i])) continue; buf = s.Right(k - i); break; } wcout

Слайд 30


void ProcessCommands(directype &D) - 1 void ProcessCommands(directype &D) - 1 { wofstream ofstr; CStdioFile f; long nr; TCHAR ch; wstring buf;...
Описание слайда:
void ProcessCommands(directype &D) - 1 void ProcessCommands(directype &D) - 1 { wofstream ofstr; CStdioFile f; long nr; TCHAR ch; wstring buf; CString s; directype::iterator i; for (;;) { wcin >> ch; // Пропустить любой // непечатаемый символ и прочесть ch.

Слайд 31


void ProcessCommands(directype &D) - 2 void ProcessCommands(directype &D) - 2 switch (ch) { case '?': case '/': // найти или удалить: getline(wcin,...
Описание слайда:
void ProcessCommands(directype &D) - 2 void ProcessCommands(directype &D) - 2 switch (ch) { case '?': case '/': // найти или удалить: getline(wcin, buf); s = buf.c_str(); i = D.find(s); if (i == D.end()) wcout

Слайд 32


void ProcessCommands(directype &D) - 3 void ProcessCommands(directype &D) - 3 case '!': // добавить (или обновить) wcin >> nr; if (wcin.fail()) {...
Описание слайда:
void ProcessCommands(directype &D) - 3 void ProcessCommands(directype &D) - 3 case '!': // добавить (или обновить) wcin >> nr; if (wcin.fail()) { wcout

Слайд 33


void ProcessCommands(directype &D) - 4 void ProcessCommands(directype &D) - 4 if (i == D.end()) { D[s] = nr; } else (*i).second = nr; break; case...
Описание слайда:
void ProcessCommands(directype &D) - 4 void ProcessCommands(directype &D) - 4 if (i == D.end()) { D[s] = nr; } else (*i).second = nr; break; case '*': for (i = D.begin(); i != D.end(); i++) wcout

Слайд 34


void ProcessCommands(directype &D) - 5 void ProcessCommands(directype &D) - 5 for (i = D.begin(); i != D.end(); i++) { s.Format(_T(" %d...
Описание слайда:
void ProcessCommands(directype &D) - 5 void ProcessCommands(directype &D) - 5 for (i = D.begin(); i != D.end(); i++) { s.Format(_T(" %d %s\n"), (*i).second, (*i).first); f.WriteString(s); } f.Close(); } break; case '#': break; default: wcout

Слайд 35


int map2() int map2() { directype D; ReadInput(D); ShowCommands(); ProcessCommands(D); return 0; }
Описание слайда:
int map2() int map2() { directype D; ReadInput(D); ShowCommands(); ProcessCommands(D); return 0; }

Слайд 36


Морской бой (диаграмма классов)
Описание слайда:
Морской бой (диаграмма классов)

Слайд 37


Отношения на диаграмме: зависимости, обобщения, ассоциации. Зависимость – хотим показать, что один класс использует другой. Обобщение – отношение...
Описание слайда:
Отношения на диаграмме: зависимости, обобщения, ассоциации. Зависимость – хотим показать, что один класс использует другой. Обобщение – отношение типа «является», наследование, объекты класса-потомка могут использоваться всюду, где встречаются объекты класса-родителя, но не наоборот. Ассоциация – описывает совокупность связей между объектами . Частный случай - Композиция – четко выражены отношения владения, причем время жизни частей и целого совпадают.



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