Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Следовательно, у заголовка cctype
то же содержимое, что и у заголовка ctype.h
, но в форме, соответствующей программе С++. В частности, имена, определенные в заголовках с имя, определены также в пространстве имен std
, тогда как имена, определенные в заголовках .h
, — нет.
Как правило, в программах на языке С++ используют заголовки версии c имя
, а не имя .h
. Таким образом, имена из стандартной библиотеки будут быстро найдены в пространстве имен std
. Использование заголовка .h
возлагает на программиста дополнительную заботу по отслеживанию, какие из библиотечных имен унаследованы от языка С, а какие принадлежат языку С++.
for
Если необходимо сделать нечто с каждым символом в строке, то наилучшим подходом является использование оператора, введенного новым стандартом, — серийный оператор
for
(range for
). Этот оператор перебирает элементы данной ему последовательности и выполняет с каждым из них некую операцию. Его синтаксическая форма такова:
for ( объявление : выражение )
оператор
где выражение
— это объект типа, который представляет последовательность, а объявление
определяет переменную, которая будет использована для доступа к элементам последовательности. На каждой итерации переменная в объявлении
инициализируется значением следующего элемента в выражении
.
Строка представляет собой последовательность символов, поэтому объект типа string
можно использовать как выражение
в серийном операторе for
. Например, серийный оператор for
можно использовать для вывода каждого символа строки в отдельной строке вывода.
string str("some string");
// вывести символы строки str по одному на строку
for (auto с : str) // для каждого символа в строке str
cout << с << endl; // вывести текущий символ и символ новой строки
Цикл for
ассоциирует переменную с
с переменной str
типа string
. Управляющая переменная цикла определяется тем же способом, что и любая другая переменная. В данном случае используется спецификатор auto
(см. раздел 2.5.2), чтобы позволить компилятору самостоятельно определять тип переменной с
, которым в данном случае будет тип char
. На каждой итерации следующий символ строки str
будет скопирован в переменную с
. Таким образом, можно прочитать этот цикл так: "Для каждого символа с
в строке str
" сделать нечто. Под "нечто" в данном случае подразумевается вывод текущего символа, сопровождаемого символом новой строки.
Рассмотрим более сложный пример и используем серийный оператор for
, а также функцию ispunct()
для подсчета количества знаков пунктуации в строке:
string s("Hello World!!!");
// punct_cnt имеет тот же тип, что и у возвращаемого значения
// функции s.size(); см. p. 2.5.3
decltype(s.size()) punct_cnt = 0;
// подсчитать количество знаков пунктуации в строке s
for (auto с : s) // для каждого символа в строке s
if (ispunct(c)) // если символ знак пунктуации
++punct_cnt; // увеличить счетчик пунктуаций
cout << punct_cnt
<< " punctuation characters in " << s << endl;
Вывод этой программы таков:
3 punctuation characters in Hello World!!!
Здесь для объявления счетчика punct_cnt
используется спецификатор decltype
(см. раздел 2.5.3). Его тип совпадает с типом возвращаемого значения функции s.size()
, которым является тип string::size_typ
e. Для обработки каждого символа в строке используем серийный оператор for
. На сей раз проверяется, является ли каждый символ знаком пунктуации. Если да, то используем оператор инкремента (см. раздел 1.4.1) для добавления единицы к счетчику. Когда серийный оператор for
завершает работу, отображается результат.
for
для изменения символов в строкеЕсли необходимо изменить значение символов в строке, переменную цикла следует определить как ссылочный тип (см. раздел 2.3.1). Помните, что ссылка — это только другое имя для данного объекта. При использовании ссылки в качестве управляющей переменной она будет по очереди связана с каждым элементом последовательности. Используя ссылку, можно изменить символ, с которым она связана.
Предположим, что вместо подсчета знаков пунктуации необходимо преобразовать все буквы строки в верхний регистр. Для этого можно использовать библиотечную функцию toupper()
, которая возвращает полученный символ в верхнем регистре. Для преобразования всей строки необходимо вызвать функцию toupper()
для каждого символа и записать результат в тот же символ:
string s("Hello World!!!");
// преобразовать s в верхний регистр
for (auto &с : s) // для каждого символа в строке s
// (примечание: с - ссылка)
с = toupper(с); // с - ссылка, поэтому присвоение изменяет
// символ в строке s
cout << s << endl;
Вывод этого кода таков:
HELLO WORLD!!!
На каждой итерации переменная с
ссылается на следующий символ строки s
. При присвоении значения переменной с
изменяется соответствующий символ в строке s
.
с = toupper(с); // с - ссылка, поэтому присвоение изменяет
// символ в строке s
Таким образом, данное выражение изменяет значение символа, с которым связана переменная с
. По завершении этого цикла все символы в строке str
будут в верхнем регистре.
Серийный оператор for
работает хорошо, когда необходимо обработать каждый символ. Но иногда необходим доступ только к одному символу или к некоторому количеству символов на основании некоего условия. Например, можно преобразовать в верхний регистр только первый символ строки или только первое слово в строке.
Существуют два способа доступа к отдельным символам в строке: можно использовать индексирование или итератор. Более подробная информация об итераторах приведена в разделе 3.4 и в главе 9.
Оператор индексирования ( оператор []
) получает значение типа string::size_type
(раздел 3.2.2), обозначающее позицию символа, к которому необходим доступ. Оператор возвращает ссылку на символ в указанной позиции.
Индексация строк начинается с нуля; если строка s
содержит по крайней мере два символа, то первым будет символ s[0]
, вторым — s[1]
, а последним символом является s[s.size() - 1]
.
Интервал:
Закладка: