Главная » Просмотр файлов » Бьерн Страуструп. Язык программирования С++. Специальное издание (2011)

Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033), страница 149

Файл №1004033 Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (Бьерн Страуструп. Язык программирования С++. Специальное издание (2011)) 149 страницаБьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033) страница 1492018-10-07СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 149)

20.3.14. Размер и емкость Проблемы с памятью решаются в том же ключе, что и у класса «ес(ог (816.3.8); (етр(а(е<с(азз Сй, с(азз Тг = сйаг <га<(з<СЬ>, ей<ля А = апаса(о«<Си» с(ат Ьаяс я(г!пд ( риЫ1с: В... )) размер, емкость и пр.

!подобло 8!б.З 8): яге (уре яге() сопя(; яге (уре так яге() сопя( яге (уре (епд(й () сопя ( гетгп иге (); ) Ьоо( етр(у () сопя( (ге(игп яге () ==О( ) <У число символов 920.3.4) Р л<аксималькал длила < траки Если з2 не находится внутри з, то значение роя равно прок Чтение или запись с таким значением генерирует исключение ои( о(' «аиде (820.3.5). Применить Вайс вийя(«1п» можно следуюшим образом: (уре<(еГ Вая1с зийяичпя<сйаг> Вийя(пад< гойу ('( ) ( я(г(па з = "Ма<у йа(( а 1(и(е 1атЬ" < Яийз(г!пд (з, "1атЬ") = "(ип" ( Яийя(г(па (з, "а Ви(е" ) = "по" ( я(г!ад я2 = "Лое" + вийя(г!пд(з,з.у<и<((' ' ), яппд::проз) ( ) 20.3. Стандартный строковый шаблон Ьаи(с з(ной 709 ио!и! гете (яге туре п, Сй с) и юЫгеяге(яге юуре и) (геяге(п, Сй() ); ) зюга гуре сарасйу () сопя! юЫ гезегие (яге туре гез агд = 0) У как у иесюогс 316.3.8 гу как у уесюоют 3!8.3.8 аИосаюог гуре дею аИосаюог () сопи!; )и Вызов гемгие(геи аюж) генерирует исюпочение йщюй ттог, если гив аю®>так зие() .

Юетрйае<сймз Сй, с!азз Тг, с(аии А> Ьюя!с йоеат<СЪ, Тг>а оретаюог» (Ьтк Вюгеат<СЬ, Тг>и, Ьаяс ыппд<СЬ, Тг,А>и) и гетр!аюе<с!аии Сй, с(аии Тг, сйииА> Ьаяс оягеат<СЬ, Тг>а орегаюог« (Ьазюс оиаеат<СЬ, Тг>и, сопя Ьазюс яппл<СЬ, Тг,А>и) т гетр!аюе<сйюм Сй, сйюзз Тг, сйии А> Ьаяс йоеат<СЬ, Тг>и 8ийпе(Ьаи!с йаеат<СЬ, Тг>и, Ьаз1с заипд<СЬ, Тг,А>и, Сй еою) и юетрйае<сйюя Сй, сйюяю Тг, с)сии А> ьаяс ваеат<сй, тг>и леюдпе(ьаяс йаеат<сй, тг>и, ьаяс заипд<сй, тг,А>и) и Операция «пишет строку в поток оип еат (в21.2.1). Операция» читает слово, ограниченное пробельным символом (ти)юйезрасемепшпа(ед тиос(1) (В3.6, В21.3.1), в строку, расширяя ее по мере необходимости (чтобы уместилось все слово).

Начальные пробельные символы пропускаются, и терминальный пробельный символ также в строку не попадает. Функция леюИпе () читает строчку текста вплоть до символа ео1, расширяя приемную строку по мере необходимости, чтобы вместить весь прочитанный текст (в3.6). Если аргумент ео1 не указывается, в качестве ограничителя используется символ ' ~п', Ограничитель удаляется из потока ввода, но в приемную строку не попадает.

Поскольку приемная строка автоматически расширяется, нет необходимости оставлять ограничитель в потоке или подсчитывать число прочитанных символов так, как это делают функции 8ею ( ) нлн дею11пе ( ) для символьных массивов Щ21.3.4). 20.3.16. Обмен строк как и для векторов (в!6.3.9), для типа июг1п8 функция тиар () может оказаться эффективнее универсального алгоритма: гетр!а!с<с!аиз Сй, с!ат Тг, с!азз А> юЫ зииар (Ьаяс июг(пд<СЬ, Тг,А>и, Ьаиюс июг!пд<СЬ, Тг, А>и) 20.3.15. Операции ввода/вывода Одно из важнейших применений типа июг1аа заключается в использовании строк этого типа для приема ввода, или в качества источника вывода.

Операции ввода/вывода для Ьаяс зи1пя представлены в заголовочном файле <игг(ая> (а не в <1оиггеат>): Глава 20. Строки 20.4. Стандартная библиотека языка С Стандартная библиотека языка С++ унаследовала функции для манипуляции С-строками из стандартной библиотеки языка С. В настояший раздел включены лишь самые полезные из них. Описание не претендует на полноту; за дальнейшей информацией обрашайтесь к справочным руководствам. Имейте ввиду, что разработчики конкретных реализаций часто добавляют в стандартные заголовочные файлы свои нестандартные функции, так что непросто бывает выяснить, какие функции доступны для всех реализаций, а какие нет.

Заголовочные файлы, предоставляюшие возможности стандартной библиотеки языка С, перечислены в 516.1.2. Функции для работы с памятью рассматриваются в 519.4.6, функции ввода/вывода — в 521.8, а математические функции — в В22.3. Функции, имеющие отношение к запуску программ и их завершению, рассматриваются в 53.2 и 59.4.1.1, а средства для работы с неуказанным числом функциональных параметров — в 57.6. Функции для работы с «широкими» строками можно найти в <спсйа«> и <исйаг. й>.

20.4.1. С-строки Функции для манипуляции С-строками представлены в заголовочных файлах <зг«(пя. й' и <сз1пияз< сваг* зггсру (сйаг* р, сопя сйаг* о) ! сйаг* зггсаг (сйаг* р, сот! сйаг* о) 1 сйаг* малеру (сйаг* р, сопЯ сйаг* 4, ги1 п) сйаг* з«глсаг (сйаг* р, сот! сйаг* д, (и1 и) (I копирование из д в р (вкл. терминатор) УУ добавление ~у к р (вкл. терминатор) УУ копирование л сйаг из о в р У(добавление л сйог иэ о в р з(хе 111«!еп (солзг сйаг* р) УУ длина р (без учета терминатора) 1Л1 зисглр(СОИЗ1 сйаг* р, соиЯ сйаг«о); УУсровниваем р и о !п1 ягистр(сот! айаг* р, сопл! сйа«* ~у, ии и) ! ()сравниваем первые п сйаг сйаг' Ягсйг(сйаг* р, (иге) 1 сопл( сйаг* Ягсйг(соил! сйаг* р, !иг С); сйаг* Яггсйг(сйаг* р, 1иг с) 1 сопл! сйаг* згггсйг (сопл! сйаг* р, !п1 с); сйаг* ЯгЯг(сйаг* р, сот! сйаг* о); сопЯ сйаг* Ягз1г(сопз1 сйаг* р, сопЯ сйаг* а) УУ ищем первое с в р УУ ищем последнее с в р У ищем первое д в р сваг* зорйгй (сйаг* р, сопл! сйаг* о) 1 (У ищем первый сйаг из 9 в р сопя сйаг* зггрЬгй (сопЯ сйаг* р, сопЯ сйаг' ((); ясе 111«зри (солт сйаг* р, сопз1 сйаг' д) ! з1гсзрп (соил! сйаг* р, соим сйаг* 4) ! У число сйог в р до любого сйаг не в д ()число сйаг в р до любого сйаг из д Предполагается, что указатель не равен нулю, а массив элементов типа сйа«, на который он указывает, завершается нулем.

Функции, в именах которых присутствует зг«п, в случае недобора символов до числа п, заполняют вакансии нулями, При сравнении одинаковых строк возврашается нуль; отрицательное число возвращается, если первая строка лексикографически предшествует второй, и положительное число в противном случае. 20.4. Стандартная библиотека языка С 711 Естественно, в С нельзя определить функции с одинаковыми именами (перегрузка функций).

Но в С++ они нужны для предоставления безопасных сопл(-версий. Например: го((( (( сопи сйаг* рос, сйаг* рс) У С++ ( *з(гсйг(рсс, 'а' ) = 'Ь' *з(гсйг(рс, 'а') = 'Ь'; ) Функцию з(гсйг() в С++ невозможно использовать для записи в константную строку. В то же время С-программа может проэксплуатировать более слабую проверку типов: сйаг' мгсйг(сопл( сйаг" р, (п( с); )* библиотечная фун-я языка С, а не Сьь *) ) * С, а в С++ не скомпилируется *) )* приводит сопй к поп-сопл() о(( в С, еггог в С++»( ) * о(( на С и С++ *( Всюду, где только возможно, следует использовать тип мг(п» вместо С-строк.

Конечно, С-строки и предназначенные для их обработки стандартные функции библиотеки языка С могут обеспечить высокую эффективность, но даже опытные программисты при работе с ними допускают неочевидные («глупые») ошибки. В то же время С++-программисты неизбежно с ними сталкиваются, просматривая старый С-код. Вот соответствующий типичный пример: гоЫ)" (айаг* р, сйаг* 0) (((р==а) ге(игп; Ууказатели равны Ц (зсгстр (р, а) ==О) () значение строк равны ( Ьп (' = з(г(еп (р); ) У число символов (без учета терминатора) сйаг Ьи((200); з(гсру (Ьи/; р ); Ю копируем р в Ьи(' (включая терминатор) (( опасно: когда-нибудь переполнится.

о' копируем 200 сйаг из р в Ьи( У опасно: когда-нибудь не скопируется терминатор. з( ру(ьи~,р, г00) ( Ввод и вывод С-строк обычно выполняется с помощью функций семейства рг(пб(() (~2Е8). В заголовочных файлах <з((з((Ь. й> и <сз((И(Ь> стандартная библиотека объявляет полезные функции для конвертации строк, представляющих числовые значения, в числа. Например: ((вийе а(о/(сопл( сйаг* р); У преобразует ро в ((вийе ((оиЫе зобо(((сопл( сйаг* р, сйа(** еп(() ( Упреобразует р() в а(оиЫе (зи а(о( (сопл( сйаг* р); Ю преобразует ро в!и( (основание !О) гоИ0(сопл( сйаг* рос, сйаг* рс) ( зп ейг (рос, ' а ' ) = ' Ь '; зп ейг (рс, ' а ' ) = ' Ь '; ) (( еггог: нельзя присвоить соил( сйаг ((о)( но не аккуратно: в рс может не быть 'а' 712 Глава 20.

Строки !опе асо! (сопи слег* р); 77 преобразует р() в !опя (основание 10) !опя игсо! (сопл! сваг* р, сваг** епсс, !пс ь) с у преобразует р() в !опе (основание ь) Пробельные символы в начале строк игнорируются. Если строка не представляет собой числового значения, возвращается нуль. Например„а!о!(чзегеи" ) дает О. Если в вызове лито!(р, еис(, Ь) еис1 не равно нулю, непрочитанная часть строки доступна с помощью *еиИ.

Если Ь==О, то число интерпретируется как целый литерал С++ 54.4.1); например, префикс Ох соответствует шестнадцатеричной форме записи числа, 0 — восьмеричной и т.д. Возвращаемые функциями асо('( ), асо1 ( ) и асо1 ( ) числа не определены тогда, когда они пытаются преобразовать число, не отображаемое с помощью типов возврата этих функций. Если входная строка функции зсгсо1() содержит текстовое представление числа, которое не может быть отображено в типе 1оия !ис, или в вызове функции змос(() строка содержит представление числа, неотобразимого в ФоиЬ1е, то есгио принимает значение ЕЗЫМСЕ, и возвращается очень большое (или очень маленькое) значение. За исключением обработки ошибок, асо((з) эквивалентна всгст((в, 0), асо!(в) эквивалентна 1ис(зсгсо1(з, О, 10) ), и асо1(з) эквивалентна зсгсо1(з, О, 10) .

20.4.2. Классификация символов В заголовочных файлах <ссуре. Ь> и <сссуре> стандартная библиотека объявляет полезные функции для работы с АБСП-символами и другими символьными наборами: тс соиррег (тс с); 7! эквивалент с в верхнем регистре !лс со1он ег (спс с) ! 77 эквивалент с в нижнелс регистре Реализации этих функций обычно используют символ в качестве индекса в таблице символьных атрибутов. Поэтому следующий код (7(('а'<=с ьь с<='г') ( ( ('А'<=с ьь с<='У') ) ( 7! ...

Характеристики

Тип файла
DJVU-файл
Размер
8,84 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6461
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее