Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
• сначала решите, необходимо ли фактически добавлять элементы в середину контейнера. Зачастую проще добавлять элементы в vector, а затем использовать библиотечную функцию sort()(рассматриваемую в разделе 10.2.3) для переупорядочивания контейнера по завершении ввода;
• если вставка в середину необходима, рассмотрите возможность использования контейнера listна фазе ввода, а по его завершении — копирования списка в вектор.
Но что если нужен и произвольный доступ, и вставка (удаление) элементов в середину контейнера? Решение будет зависеть от отношения цены доступа к элементам в контейнере listи forward_listцены вставки (удаления) элементов в контейнер vectorили deque. Как правило, выбор типа контейнера определит преобладающая операция приложения (произвольный доступ или вставка и удаление). В таких случаях, вероятно, потребуется проверка производительности приложения с использованием контейнеров обоих типов.
Если вы не уверены, какой контейнер использовать, напишите свой код так, чтобы он использовал только те операции, которые совпадают у вектора и списка: используйте итераторы, а не индексы, и избегайте произвольного доступа к элементам. Так будет удобней заменить вектор на список при необходимости.
Упражнение 9.1. Какой из контейнеров ( vector, dequeили list) лучше подходит для приведенных ниже задач? Объясните, почему. Если нельзя отдать предпочтение тому или иному контейнеру, объясните, почему?
• Чтение известного заранее количества слов и вставка их в контейнер в алфавитном порядке по мере ввода. В следующей главе будет показано, что ассоциативные контейнеры лучше подходят для этой задачи.
• Чтение неизвестного заранее количества слов. Новые слова всегда добавляются в конец. Следующее значение извлекается из начала.
• Чтение неизвестного заранее количества целых чисел из файла. Числа сортируются, а затем выводятся на стандартное устройство вывода.
9.2. Обзор библиотечных контейнеров
Возможные операции с контейнерами составляют своего рода иерархию.
• Некоторые функциональные возможности (табл. 9.2) поддерживаются контейнерами всех типов.
• Другие операции являются специфическими только для последовательных (табл. 9.3), ассоциативных (табл. 11.7) или неупорядоченных (табл. 11.8) контейнеров.
• Остальные являются общими лишь для небольшого подмножества контейнеров.
Таблица 9.2. Средства контейнеров
| Псевдонимы типов | |
|---|---|
iterator |
Тип итератора для контейнера данного типа |
const_iterator |
Тип итератора, позволяющий читать, но не изменять значение элемента |
size_type |
Целочисленный беззнаковый тип, размер которого достаточно велик, чтобы содержать значение размера наибольшего возможного контейнера данного типа |
difference_type |
Целочисленный знаковый тип, размер которого достаточно велик, чтобы содержать значение разницы между двумя итераторами |
value_type |
Тип элемента |
reference |
Тип l-значения элемента; то же, что и value_type& |
const_reference |
Тип константного l-значения элемента; аналог const value_type& |
| Конструкторы | |
С с; |
Стандартный конструктор, создающий пустой контейнер |
С c1(c2); |
Создает контейнер c1как копию контейнера c2 |
С c(b, е); |
Копирует элементы из диапазона, обозначенного итераторами bи е( недопустимо для массива ) |
C c{а, b, c...}; |
Списочная инициализация контейнера с |
| Присвоение и замена | |
c1 = c2 |
Заменяет элементы контейнера c1элементами контейнера c2 |
c1 = {a, b, c...} |
Заменяет элементы контейнера c1элементами списка ( недопустимо для массива ) |
a.swap(b) |
Меняет местами элементы контейнеров аи b |
swap(а, b) |
Эквивалент a.swap(b) |
| Размер | |
c.size() |
Возвращает количество элементов контейнера c( недопустимо для контейнера forward_list) |
c.max_size() |
Возвращает максимально возможное количество элементов контейнера с |
c.empty() |
Возвращает логическое значение false, если контейнер cпуст. В противном случае возвращает значение true |
| Добавление/удаление элементов (недопустимо для массива) | Примечание: интерфейс этих функций зависит от типа контейнера |
c.insert( args ) |
Копирует элемент(ы), указанный параметром args , в контейнер c |
c.emplace( inits ) |
Использует параметр inits для создания элемента в контейнере с |
c.erase( args ) |
Удаляет элемент(ы), указанный параметром args , из контейнера c |
c.clear() |
Удаляет все элементы из контейнера c; возвращает значение void |
| Операторы равенства и отношения | |
==, != |
Равенство допустимо для контейнеров всех типов |
<, <=, >, >= |
Операторы отношения ( недопустимы для неупорядоченных ассоциативных контейнеров ) |
| Получения итераторов | |
c.begin(), c.end() |
Возвращают итератор на первый и следующий после последнего элемент в контейнере с |
c.cbegin(), c.cend() |
Возвращают const_iterator |
Дополнительные члены реверсивных контейнеров (недопустимы для forward_list) |
|
reverse_iterator |
Итератор, обеспечивающий доступ к элементам в обратном порядке |
const_reverse_iterator |
Реверсивный итератор, не позволяющий запись в элементы |
с.rbegin(), c.rend() |
Возвращает итератор на последний и следующий после первого элементы контейнера c |
c.crbegin(), c.crend() |
Возвращают итератор const_reverse_iterator |
В этом разделе рассматриваются аспекты, являющиеся общими для всех контейнеров. Остальная часть этой главы посвящена исключительно последовательным контейнерам; операции, специфические для ассоциативных контейнеров, рассматриваются в главе 11.
Обычно каждый контейнер определяется в файле заголовка, название которого совпадает с именем типа. Таким образом, тип dequeопределен в заголовке deque, тип list— в заголовке listи т.д. Контейнеры — это шаблоны классов (см. раздел 3.3). Подобно векторам, при создании контейнера специфического типа необходимо предоставить дополнительную информацию. Для большинства контейнеров, но не всех, предоставляемой информацией является тип элемента:
Интервал:
Закладка: