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

Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 138

Файл №1160791 Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004) 138 страницаБ. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791) страница 1382019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Такой итератор может указывать (только) на элементы своей последовательности и на элемент, следуюший за последним. Однако, для обратного птератора злемент, следующий за последним, зто элемент (недоступный), следующий перед первым в исходной последовательности. Чтобы избежать нарушения доступа, текуший итератор указывает на злемент, слсдуюший за тем, на который ссылается обратный итератор.

Это приводит к тому, что * возврашаст значение * [сиггеп1 — 1), и++ реализуется через —, применяемый к текушсму итератору. Обратный итератор поддерживает операции, поддерживаемые его инициализатором (и только их). Например; воЩ[вес1ог<1п1>й в, !1в1<суаг>й !вг) ( // правильно: итера тор с произвольным доступом в.гЬеу!п [)[в) = 1 //оьиибна двунаправленный итсратор не поддерживает операгпор() !к1 гЬеу!и ))[в) = '43 ' [л++ь++!вггЬеу!л ()) =-'43 О правильно! Кроме того, для обратных итераторов библиотека обеспечивает обычные операции сравнения: ==, )=, «, =, > и >вн 19.2.6.

Итераторы потоков Обгпчпо ввод/вывод выполняется при помощи библиотеки потоков (глава 21), систелгы графического пользовательского интерфейса (не определяемой стандартом С+в) или функциями ввода-вывода язьгка С (9 21.8). Эти интерфейсы ввода/вывода в первую очередь направлены на считывание и запись отдельных значений разнообразных тиг!ов. Чтобы согласовать операции ввода/вывода с механизмом контейнеров и алгоритмов, стандартная библиотека обеспечивает четыре итераторных типа: ° ок1геат !1ега1огдля записи в ок1геат (9 3.4, 6 21 2 1); ° !к1геат !1ега1ог для чтения из !к1геат (9 3.6, 9 21.3.1); ° ок1геатЬит' 11ега1ог для записи в буфер потока (9 21,6.1); ° !к1геатби/ !1ега1огдля чтения из буфера потока (6 21.6.2).

623 19.2. Итераторы и последовательности Идея заключается просто в том, чтобы представить входные и выходные потоки в виде последовательностей: 1ет р(а(е<с!акк Т, с!акк СЬ = сйаг, с!акк Тг = сЬаг 1 ас1ь <СЬ» с(азк ок1геат Нега1ог: риЫсс ((ега1ос ои(ри1 дега(ог 1ау, ооЫ, ио!д, ооЫ, ооЫ> ( риЫ(с. !урес(е~Ьаз!с ок(геат<СЬ, Тг ок( еат 1уре; (урес(е)ССЬ суаг 1уре; (урес(е/Тт 1гас1к 1уре; ок(геат с1ега!от(озогеа>п 1урей к); озсгеат Нега1ос. (ок( еат (урей к, сопк1 СЬ' с(е!(т); оя!ге от Нега1от (сов к( омтеат с(ега(огй) -оз(геасп с(ега1ог (); // затссь в по!!гак вывода оз(геат с(ета(огй арета(от= (сопя( Тй иа!) оз!геат !(ега1огй орега1ог" (), оыгеат ((ега(огй арета(ог«-+ (); ок1геат Нега!огй арета(ог"+ ((и(); Этот итератор принимает обычные операции записи н инкремептирования нтерато- ра для записи н преобразует их в операции вывода в оя(геат.

Например: иоЫ/0 // запись целых в сои( «ерез оя // вывод 7 // готово к следуюсцеиу выводу //вывод 79 ок1геат нега1от<!п1> оз (сои(), *аз= 7; ~-сок; 'оз = 79; 1етр!а1е<с(акк Т с(аяз СЬ = сваг с!азк Тг= сьаг !гайк<СЬ>, с(акк Р(з( = р(тсЬЯ 1> с!акк ск(геат с(ега(ог риЫ(с гуета(ог<Ы1ри1 с(ега1ог (ау, Т, Р(з(, сопк1 Т", сопя! Тй> ( риЬ!!с: (урес(е/ СЬ сйаг (уре; (урес(е) Тг (та((к 1уре; (урес(е3 Ьази.

ск1геат<СЬ, 7г> ся(геат (уре; Операция +ь может осуществить действительную операцию вывода, а может не произвести никакого эффекта. Различные реализации используют разные стратегии. Поэтому, чтобы программа была переносимой, оператор яе лолжен появляться между каждыми двумя присваиваниями итератору оя(теат !(ега(ог. Естественно, все стандартные алгоритмы написаны таким образом — плаче они бы не работали с контейнерами иес1от. Вот почему ок(геат ((ета(ог определен так, как показано выше. Реализация оя1геагп !(ега(ог тривиальна, и я оставляю ее в качестве упражнения (9 19.6[4)).

Стандартный ввод/вывод поддерживает различные типы символов; сйаг (га!(к (9 20,2) описывают те аспекты символьных типов, которые могут оказаться важными для ввода/вывода и строк к(т!пу. Итсратор для чтения для потоков !я(гент определяется аналогично: Глава 19. Итераторы и распределители памяти 624 // конец ввода !я1геат !1ега1о~ ((, Ыгеат Ьега1ог(!я!геат 1урейя! !я!геат Ыега1ог(сопя! !яггеат !1ега1огйх( -!я1геат йега1ог((; сопя1 Тй орега1ог" (( сопя1; сопя! Т'й орега1ог — > (( соля1; !яггеат Иега1огй орега1огн- ((; т1геат Иегагогорега1огчч- (сп1); Этот итератор определен так, чтобы обычные операции с контейнером» приводили к чтению из потока из!гент. Например: поЫ/(( ( //чтение целых из ст червя !я //чтение!п1 // готово к следующепу вводу //чтение !п1 !яггеат Ыега1вг !лс> гя (с!л! ип!! ='!я; -и.!я; !л1 !2 = *!я; Итератор !я1геат !1ега1ог по умолчанию представляет конец ввода, так что мы мо- жем задать входную последовательностзс оо!с!/(иес1ог !п1>й и( ( сору (!я1геат !1ега!ог !лг> (с!и), !яггеат !1ега1ог<!п1> (! ЬасЬ !пяеггег (и)(; Чтобы это заработало, стандартная библиотека обеспечивает для итераторов !я1геат !1ега1ог операторы == и ( Реализация !я1геат !1ега1ог не так тривиальна, как ояугеат !1ега1ог, по тоже проста.

Я ее оставляю в качестве упражнения Я 19.6(5)). 19.2.6.1. Буфера потоков 1етр!а1е<с!аяя СЬ, с!аяя Тг= сЬаг 1га!!я<СЬ > с!аяя !яггеатЬи/ !1ега1ог : риЬбс Иегагог три1 Нега1ог 1ау, СЬ, 1урепате Тг:оЯуре, СЬ', СЬй> ( риЬ!!с 1урес!е/СЬ сдаг 1уре; 1уреде/Тг 1га!1я Суре; !уреЫе/1урепате Тг т1 1уре!п! 1уре; !урег!е5Ьая!с яггеатйц/<СЬ, Т яггеатди/ 1уре; гуре!!е/Ьая!с !яггеат<СЬ, Тг> !яггеат 1уре; Как описывается в 9 21.6, поток ввода/вывода основан на идее о потоках !я1геат и оя1геат, заполняющих и освобождающих буфера, ввод/вывод из которых реализован на низком физическом уровне.

Можно обойти форматирование стандартных потоков ввода/вывода и работать напрямую с буферамн потоков Я 21.6.4). Такая возможностьь также обеспечивается для алгоритмов через итераторы !я1геатЬи/ !1ега1ог и оя1геатЬи~ (1ега1ог. 525 19.2. Итераторы и последовательности //вспомогательный тип с1акк ргоху; // конец буфера // и!пение из Игватби/объекта и !к1геатЬи/ Иега1ог() 1Ьгоив(); !ЫгеатЬи/ нега!юг(1я1геат 1урей !я) 1Ьгот (), ИтгеатЬи/ Иега1ог (к1геагпби/ 1уре*) 1Ьгот (); !яггеатби/ Иега1ог (сапы ргохуй р) 1Ьгоив (); СЬ орега1ог' () сопи1; !я1геатЬи! Иега1огй орега1ог++ (); ргоху орега1огьл (1п1) // чтение из к1сгатби!объекта р // префиксный оператор // постфиксныи оператор //оба или ни один из и!гватби/в конце файла 1ео/) Ьоо1 евана! (ИугеатЬи/ Иега1огй) й 1етр!а1е<с!азя СЬ, С!акк Тг = сбаг 1гаИи<СЬ» с!аяк 1я1геатбьу Иегагог<СЬ, Тг' яргоху ( СЬ оа1; Ьасбс я1геатби/<СЬ, Тг * ЬиХ ргоху (СЬ о, Ьаяс и1геатби/<СЬ, Тг>' Ь): иа1(о), Ьи/(Я () риЫИ, СЬ орега!ог* () ( ге!игл оа1; ) оя1геатби/' Иега1ог определяется похожим образом: 1етр!а1е с!акк СЬ, с!аки Тг= сбаг 1гайк<СЬ» с!акя оя! еатби!' Иега1ог: риЫсс Иега1ог<ои1ри1 Иега1ог 1ау, иоЫ, ио!И, оо!И, оо!И> ( риЫ!с 1урес!е/СЬ сбаг 1уре; 1уреде/Те!гойя 1уре; 1урейе/батс и1геатби/<СЬ, Тгг и1геатбц/ 1уре, 1уре<1е/Ьаксс офгеат<СЬ, Тг оыгеат еуре; // запись в буфер потока оя ок1геатЬи! Иега1ог (ок1геат 1урей оя) Ии ою (); окггеат Ьи/ Иега!ог (ЫгеатЬи/ 1уре ) 1Ьгосо (), ои1геатби/ Иега1огй орега1ог= (СЬ), ок1геатби/ Иега1огй орега!ог' (); ок1геатЬи/' Иега1огй орегасог++ (); оз1геатби/ Иега1огй орега1огь+ (!и1); //!гие, если встретили ТглеоЯ ЬооЦа!!ее!() сопи! 1Ьгот (); ) Кроме того обеспечиваются операторы ++ и (-.

Считывание из я1геатЬи/' — это операция болес низкого уровня, чем считывание из !я1геат, и следовательно, интерфейс итератора !з1геатби/ Иега1ог сложнее, чем 1з1геат Иега1ог. Однако, когда 1я1геатЬиТ Иега1ог должным образом инициализировав, операторы *, ++ и = имеют свое обычное значение, если их использовать соответствующим образом. Тип ргоху (заместитель) — это определенный при реализации вспомогательный тип, который позволяет реализовать постфиксный оператор++ без введения ограничений на реализацию з1геатби/. При инкремснте итератора тип ргоху содержит результирующее значение; Глава 19.

Итераторы и распределители памяти 19.3. Итераторы с проверкой (с()ес(сес( (1ег) Кроме обеспечиваемых стандартной библиотекой, программист может создать собственные игераторы. Это часто необходимо при создании нового вида контейнера, а иногда новый нтератор является хорошим способом по!шержки особого использования суц1ествуюп1их контейнеров. Использование стандартных контейнеров снижает затраты на явное распределение памяти. Использование стандартных алгоритмов снижает затраты на явную адресацию элементов в контейнере. Исполъзование стандартной библиотеки и возможностей языка, поддерживающих безопасность с точки зрения типов, очень значительно снижает количество не выявляемых компилятором ошибок по сравнению с традиционным стилем языка С. Однако, задачу предотвращения обращения за пределы контейнера стандартная библиотека по-прежнему оставляет программисту.

Если обратиться к элементу некоторого контейнера х в стиле х[хк!зе () > 7) случится нечто непредсказуемое и, как правило, нехорошее. Во многих случаях помогает использование контейнеров оес1ог с проверкой диапазона, таких как )гес (5 3.7 2). В большинстве случаев каждое обращение проверяется через итератор. с1тобы достичь такого уровня проверки, не возлагая на программиста тяжелого бремени новых обозначений, нам нужны итераторы с проверкой и удобный способ прикрепления их к контейнерам. Как для связывателей Я 18АА.1), вставок (9 19.2А) и т. и., дчя создания СЬесуей 1!ег я написал функции: 1етр1аге<с!акк Сонг, с!акк 11ег> СЬесдей !1ег<Соп1 Лег> таЬе сЬесуей(Сопгь с Лег!) ( ге1агп СЬесЬес! пег<Сап!, !1ег> (с, !); 1етр!а1е<с!акк СопР СЬесуей Ыег<Соп1, 1урепате Сепг;!1ега1ог' таЬе сЬесуей (Сепг<' с) ( гейип СЬесуей !1ет Сол1, 1урепате Соп1суегагог (с, с,Беуйп ()); Эти функции очень удобны с точки зрения обозначений, позволяя выводить типы из аргументов, а не объявлять такие типы явно.

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

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

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

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