- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
Шрифт:
Интервал:
Закладка:
5. Выведите на экран сумму элементов контейнера vd.
6. Выведите на экран разность между суммой элементов контейнеров vd и vi.
7. Существует стандартный алгоритм reverse, получающий в качестве аргументов последовательность (пару итераторов); поменяйте порядок следования элементов vd на противоположный и выведите их в поток cout.
8. Вычислите среднее значение элементов в контейнере vd и выведите его на экран.
9. Создайте новый контейнер vector<double> с именем vd2 и скопируйте в него элементы контейнера vd, которые меньше среднего значения.
10. Отсортируйте контейнер vd и выведите его элементы на экран.
Контрольные вопросы
1. Приведите примеры полезных алгоритмов из библиотеки STL?
2. Что делает алгоритм find()? Приведите по крайней мере пять примеров.
3. Что делает алгоритм count_if()?
4. Что алгоритм sort(b,e) использует в качестве критерия поиска?
5. Как алгоритмы из библиотеки STL получают контейнеры в качестве аргумента ввода?
6. Как алгоритмы из библиотеки STL получают контейнеры в качестве аргумента вывода?
7. Как алгоритмы из библиотеки STL обозначают ситуации “не найден” или “сбой”?
8. Что такое функция-объект?
9. Чем функция-объект отличается от функции?
10. Что такое предикат?
11. Что делает алгоритм accumulate()?
12. Что делает алгоритм inner_product()?
13. Что такое ассоциативный контейнер? Приведите не менее трех примеров.
14. Является ли класс list ассоциативным контейнером? Почему нет?
15. Сформулируйте принцип организации бинарного дерева.
16. Что такое (примерно) сбалансированное дерево?
17. Сколько места занимает элемент в контейнере map?
18. Сколько места занимает элемент в контейнере vector?
19. Зачем нужен контейнер unordered_map, если есть (упорядоченный) контейнер map?
20. Чем контейнер set отличается от контейнера map?
21. Чем контейнер multimap отличается от контейнера map?
22. Зачем нужен алгоритм copy(), если мы вполне могли бы написать простой цикл?
23. Что такое бинарный поиск?
Термины
Упражнения
1. Перечитайте главу и выполните все упражнения из врезок ПОПРОБУЙТЕ, если вы еще не сделали этого.
2. Найдите надежный источник документации по библиотеке STL и перечислите все стандартные алгоритмы.
3. Самостоятельно реализуйте алгоритм count(). Протестируйте его.
4. Самостоятельно реализуйте алгоритм count_if(). Протестируйте его.
5. Что нам следовало бы сделать, если бы мы не могли вернуть итератор end(), означающий, что элемент не найден? Заново спроектируйте и реализуйте алгоритмы find() и count(), чтобы они получали итераторы, установленные на первый и последний элементы. Сравните результаты со стандартными версиями.
6. В примере класса Fruit из раздела 21.6.5 мы копировали структуры Fruit в контейнер set. Что делать, если мы не хотим копировать эти структуры? Мы могли бы вместо этого использовать контейнер set<Fruit*>. Однако в этом случае мы были бы вынуждены определить оператор сравнения для этого контейнера. Выполните это упражнение еще раз, используя контейнер set<Fruit*, Fruit_comparison>. Обсудите разницу между этими реализациями.
7. Напишите функцию бинарного поиска для класса vector<int> (без использования стандартного алгоритма). Выберите любой интерфейс, какой захотите. Протестируйте его. Насколько вы уверены, что ваша функция бинарного поиска работает правильно? Напишите функцию бинарного поиска для контейнера list<string>. Протестируйте ее. Насколько похожи эти две функции бинарного поиска? Как вы думаете, были бы они настолько похожи, если бы вам не было ничего известно о библиотеке STL?
8. Вернитесь к примеру, связанному с подсчетом частоты слов из раздела 21.6.1, и модифицируйте его, чтобы слова выводились в порядке следования частот, а не в лексикографическом порядке. Например, на экран должна выводиться строка 3: C++, а не C++: 3.
9. Определите класс Order (заказ), члены которого содержат имя клиента, его адрес, дату рождения и контейнер vector<Purchase>. Класс Purchase должен содержать поля name, unit_price и count, характеризующие товар. Определите механизм считывания из файла и записи в файл объектов класса Order. Определите механизм для вывода на экран объектов класса Order. Создайте файл, содержащий по крайней мере десять объектов класса Order, считайте его в контейнер vector<Order>, отсортируйте по имени (клиента) и запишите обратно в файл. Создайте другой файл, содержащий по крайней мере десять объектов класса Order, примерно треть из которых хранится в первом файле, считайте их в контейнер list<Order>, отсортируйте по адресам (клиента) и запишите обратно в файл. Объедините два файла в третий файл, используя функцию std::merge().
10. Вычислите общее количество заказов в двух файлах из предыдущего упражнения. Значение отдельного объекта класса Purchase (разумеется) равно unitprice*count.
11. Разработайте графический пользовательский интерфейс для ввода заказов из файла.
12. Разработайте графический пользовательский интерфейс для запроса файла заказов; например, “Найти все заказы от Joe,” “определить общую стоимость заказов в файле Hardware” или “перечислить все заказы из файла Clothing.” Подсказка: сначала разработайте обычный интерфейс и лишь потом на его основе начинайте разрабатывать графический.
13. Напишите программу, “очищающую” текстовый файл для использования в программе, обрабатывающей запросы на поиск слов; иначе говоря, замените знаки пунктуации пробелами, переведите слова в нижний регистр, замените выражения don’t словами do not (и т.д.) и замените существительные во множественном числе на существительные в единственном числе (например, слово ships станет ship). Не перестарайтесь. Например, определить множественное число в принципе трудно, поэтому просто удалите букву s, если обнаружите как слово ship, так и слово ships. Примените эту программу к реальному текстовому файлу, содержащему не менее 5 000 слов (например, к научной статье).
14. Напишите программу (используя результат предыдущего упражнения), отвечающую на следующие вопросы и выполняющую следующие задания: “Сколько раз слово ship встречается в файле?” “Какое слово встречается чаще всего?” “Какое слово в файле самое длинное?” “Какое слово в файле самое короткое?” “Перечислите все слова на букву s” и “Перечислите все слова, состоящие из четырех букв”.
15. Разработайте графический пользовательский интерфейс из предыдущего упражнения.
Послесловие
Библиотека STL является частью стандартной библиотеки ISO C++, содержащей контейнеры и алгоритмы. Она предоставляет обобщенные, гибкие и полезные базовые инструменты. Эта библиотека позволяет сэкономить массу усилий: изобретать колесо заново может быть забавным, но вряд ли продуктивным занятием. Если у вас нет весомых причин избегать библиотеки STL, то используйте ее контейнеры и основные алгоритмы. Что еще важнее, библиотека STL

