Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033), страница 24
Текст из файла (страница 24)
Добавить в класс вес!о«такие операции довольно просто, но его обшность и гибкосп препятствуют достижению высокой эффективности, которой придается важное значение в серьезных вычислительных задачах. Как следствие, в стандартной библиотеке имеется еше один векторный тип, который называется юайитау. Он не настолько обший, зато хорошо поддается оптимизации при вычислениях: 1етр!а!в<с!аяз Т> с1азя га(аггау ( У... Ть орегагог(] (яае 1) 1 Глава 3. Обзор стандартной библиотеки 108 Тил я!те ! есть беззнаковый целочисленный тип, который используется в конкретных системах для индексации массивов. Для класса яа!аггау реализованы обычные арифметические операции и наиболее общие математические функции.
Например: 77 Стандартная функаия из <иа1аггау>, вычисляющая модуль: тетр1ате<с!аея Т> га!аггау< Т> аья (сопя! «а1аггау< Т> ь ); го!И Т(га1аггау<доиЫе>в а1, га1аггау<4оиЫе>а а2) 1 га1аггау<йоиЫе> а = а1*3. 14га2/а1 г а2 м= а1*3.14; а = аЬя(а); ИоиЫе И = а2[7] г 77 ... ) Подробности см. в 522.4. 3.9.3. Поддержка базовых вычислительных операций Естественно, стандартная библиотека содержит элементарные математические функции — такие как !ол(), ро!е() и соя() для типов с плавающей запятой; см. 822.3. Для всех встроенных типов предусмотрены классы, описывающие их характерные свойства, например, наибольший показатель степени для чисел с плавающей запятой; см.
822.2. 3.10. Основные средства стандартной библиотеки Средства стандартной библиотеки можно классифицировать следующим образом: 1. Базовая поддержка языка программирования (вьщеление памяти; определение типа на стадии выполнения); см. 816.1.3. 2. Стандартная библиотека языка С (с минимальнейщими изменениями для предотвращения нарушений в системе типов); см, 816.1,2, 3. Строки и потоки ввода/вывода (с поддержкой национальных алфавитов и локализации); см, главы 20 и 21. 4. Набор контейнеров (таких как нес!ог, !Ы и отар) и алгоритмов лля работы с ними (прохода по всем элементам, сортировки, слияния и тзь); см, главы 16, 17, 18 и 19.
5. Поддержка численных расчетов (комплексные числа, вектора для математических расчетов, ВГАБ-подобные и обобщенные срезы, семантика оптимизации); см. главу 22. Главными критериями для включения класса в стандартную библиотеку явля- лись следующие соображения: будет ли он использоваться любыми С++-програм- мистами (экспертами и новичками); может ли он быть представлен в обшей форме, не влекущей за собой заметных накладных расходов по сравнению с более просты- ми средствами; можно ли легко научиться его простейшему применению.
По сути Э 11 Советы 109 дела, стандартнан библиотека предоставляет наиболее фундаментальные реализации основных структур данных вкупе с фундаментальными алгоритмами их обработки. Любой алгоритм работает с любым контейнером без каких-либо преобразований. Такая структура библиотеки, обычно называемая ЯТЬ (5(апдагд Тещр!асе (з))гасу; 8(ерапот, 1994), позволяет пользователям легко создавать свои собственные контейнеры и алгоритмы помимо имеющихся стандартных, и заставлять их согласованно работать с последними. 3.11. Советы 1.
Не изобретайте колесо заново; использунте библиотеки. 2. Не верьте в чудеса; разберитесь, что делают ваши библиотеки, как они это делают и какова цена их деятельности. 3. Когда есть выбор, отдавайте предпочтение стандартной библиотеке. 4. Не думайте, что стандартная библиотека идеально подходит для всех задач. 5. Не забывайте про директиву №сис1№де для включения заголовочных файлов с определением средств стандартной библиотеки; 93.3.
6. Помните, что все средства стандартной библиотеки определены в пространстве имен зсд; 93.3. 7. Вместо строк типа сйаг* пользуйтесь строками типа зсг(и81 93.5, 93.6. 8. Если сомневаетесь — используйте вектора с проверкой диапазона индексов (такие как Гес); 93.7.2. 9. Используйте гессог<2>, 1Ы<2>, тир<лисеу,га!ие> вместо Т(1; 93.7.1, 93.7.3, 93.7.4. 10. При добавлении элементов в контейнер используйте ризЬ Ьас7с() или Ьас7с сизегсег(); 93.7.3, 93.8.
11. Лучше использоватьризЬ Ьас/с() для векторов, чем геаВос() для встроенных массивов; 93.8. 12. Самые общие исключения перехватывайте в стартовой функции тат(); 93.7.2. Часть! Основные средства Здесь описываются встроенные типы языка С++ и средства построения программ на их основе. Представлено С-подмножество языка С++ и его дополнительные возможности для поддержки традиционных стилей программирования. Также обсуждаются базовые средства составления программ на С++ из логических и физических частей.
Главы 4. Типы и объявления 5. Указатели, массивы и структуры б. Выражения и операторы 7. Функции 8. Пространства имен и исключения 9. Исходные файлы и программы Типы и объявления Не соглашайтесь ни на что, кроме совершенства! — Аноним Совершенство достигается только к моменту краха. — К.Н. Паркинсон Типы — фундаментальные типы — логические значения — символы — символьные литералы — целые — целые литералы — типы с плаваюшей запятой — литералы с плавающей запятой — размеры — зоЫ вЂ” перечисления — объявления— имена — область видимости — инициализация — объекты — ЗуреФеУ вЂ” советы— упражнения.
4.1. Типы Рассмотрим формулу х =у ьУ(г); 77х - переменная с плавающей запятой 77у - целая переменная с ночазьным значением 7 Уз — функция с аргументом целого типа, 7 возвращающая число с плавающей запятой ззааг Х; Гпз у=7; гзоаз у'(ззи); Чтобы это выражение могло использоваться в программе на С++, имена х, у и г" должны быть обьявлены надлежашим образом. То есть программист должен указать, что некие сушности, поименованные х, у ну' ,реально сушествуют, и что они имеют типы, для которых операции = (присваивание), + (сложение) и () (вызов функции) имеют точный смысл.
Каждое имн (идентификатор) в программе на С++ ассоциируется с некоторым типом. Именно тип определяет, какие операции можно выполнять с этим именем (то есть с именованной сушностью), и как интерпретируются эти операции. Например, следуюшне объявления 114 Глава 4. Типы и объявления делают наш текущий пример осмысленным. Поскольку у объявлена переменной целого типа, то ей можно присваивать значения, ее можно использовать в арифметических выражениях и т.д. С другой стороны, 7'объявлена как функция, принимающая целый аргумент, так что ее можно вызывать с подходящим аргументом. В данной главе рассматриваются фундаментальные типы (84.1.1) и объявления (84.9).
Примеры в ней просто иллюстрируют свойства языка; они не предназначены для демонстрации чего-либо практически полезного. Изощренные и реалистичные примеры будут приводиться в последующих главах, когда большая часть языка С++ будет уже рассмотрена. Здесь же перечисляются базовые элементы, из которых состоят все программы на языке С++. Вы должны освоить эти элементы плюс терминологию и сопутствующий им несложный синтаксис, чтобы выполнять законченные проекты на С++, и особенно для того, чтобы иметь возможность разбираться в чужих кодах.
Тем не менее, для изучения последующих глав глубокого понимания всех рассмотренных в настоящей главе вопросов не требуется. Достаточно бегло рассмотреть основные концепции, а за необходимыми деталями вернуться позднее. 4.1.1. Фундаментальные типы Язык С++ обладает набором фундаментальных типов, соответствующих базовым принципам организации компьютерной памяти и самым общим способам хранения данных: ° 84.2 Логический тип (Ьоо() ° 84.3 Символьные типы (такие как сйас) ° 84.4 Целые типы (такие как 1пг) ° 84.5 Типы с плавающей запятой (такие как НоиЫе) Дополнительно, пользователь может объявить ° 84.8 Перечислимые типы для представления конечного набора значений (епит) Также имеется ° 84.7 Тип яоЫ, указывающий на отсутствие информации Поверх перечисленных типов можно строить следующие типы; ° 85.1 Указательные типы (такие как 1пг") ° 85.2 Массивы (такие как сйае(1) ° 85.5 Ссылочные типы (такие как ЫоиЫеь) ° 85.7 Структуры данных и классы (глава 10) Логический, символьные и целые типы называются интегральными типами.
Интегральные типы и типы с плавающей запятой в совокупности называются арифметическими типами. Перечисления и классы (глава !О) называются типами, определяемыми пользователем, так как их нужно определить до момента использования, что контрастирует с фундаментальными типами, не требующими никаких объявлений. Поэтому их еще называют встроенными типами (Ьи(й-!и )урез). Интегральные типы и типы с плавающей запятой могут иметь различные размеры, предоставляя тем самым программисту выбор объема занимаемой ими памяти, точности представления и диапазона возможных значений (84.6). Общая идея со- 4.2.
Логический тип 4.2. Логический тип Переменные логического типа Ьоо1 могут принимать лишь два значения — «ие (истина) или уа1ге (ложь). Логические переменные служат для хранения результатов логических операций. Например: ьо!а)'(!п! а, !пг Ы ( Ьоо! Ы = а==-Ь! 77 = есть присваивание, == проверка на равенство; 77 ... Если у целых переменных а и Ь значения одинаковые, то Ы будет равно «ие; в противном случае Ы станет равным )а!ве. Часто тип Ьоо1 служит типом возврата функций, проверяющих выполнение некоторого условия (предикатные функции, нли просто предикаты).
Например: Ьоо1 !з орел (е!1е*) ! Ьоо1яееазее(!и! а, !и! Ь) (ге!игп а>Ь! ) По определению, прн преобразовании к типу !и! значению !«ие сопоставляется 1, а значению)а)зе — О. В обратном направлении целые значения неявно преобразуются в логические следующим образом: ненулевые значения трактуются как «ие, а О как Га1зе. Например; У Ьоо!(7) есть оке, так что Ь инициализируется значением оке 77 !трсие) есть 1, так что ! инициализируется значением 1 Ьоо! Ь=7! !и! 1= !еие; В арифметических и логических выражениях логические значения сначала преобразуются в целые, после чего выражения и вычисляются.