Главная » Просмотр файлов » Г. Шилтд - Самоучитель C++ (DJVU)

Г. Шилтд - Самоучитель C++ (DJVU) (1114955), страница 64

Файл №1114955 Г. Шилтд - Самоучитель C++ (DJVU) (Г. Шилтд - Самоучитель C++ (DJVU)) 64 страницаГ. Шилтд - Самоучитель C++ (DJVU) (1114955) страница 642019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

В любом случае, если в векторе хранятся элементы, то с помощью оператора индекса массива к этим элементам можно получить доступ и их изменить. Удалить элементы из вектора можно с помощью функции егаве(). Самоучитель С+-т 428 Описание Функция-член чоЫ с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пвегФ(11егаФог ), 1п11ег начало, 1пИег конец); в1*е 1уре пФах„з1хе(] сопвФ; геФегепсе орегаФог[) (э(хе 1уре )) сопвФ; сопз1 гегегепсе орегаФог[) (з!*е Фуре !) сопв1; чоЫ рцвЬ„Ьаск(сопвФ Т )Фэнэчение)1 Таблица !4.

2(продолжение) Возвращает ссылку на последний элемент вектора Возвращает итератор первого элемента век- тора Возвращает текущую емкость вектора, т. е. то число элементов, которое можно разместить в векторе беэ необходимости выделения дополнительной области памяти Удаляет все элементы вектора Возвращает истину, если вызывающий вектор пуст, в противном случае возвращает ложь Возвращает итератор конца вектора Удаляет элемент, на который указывает ите- ратор к Возвращает итератор элемента, кото- рый расположен следующим за удаленным Удаляет элементы, заданные между итерато- рами начало и конец.

Возвращает итератор элемента, который расположен следующим за последним удаленным Возвращает ссылку на первый элемент вектора Возвращает распределитель памяти вектора Вставляет параметр значение перед элемен- том, заданным итератором Ф Возвращает ите- ратор элемента Вставляет число копий параметра значение перед элементом, заданным итератором / Вставляет последовательность, определенную между итераторами начало и конец, перед элементом, заданным итератором ( Возвращает максимальное число элементов, которое может храниться в векторе Возвращает ссылку на элемент, заданный параметром ) Удаляет последний элемент вектора Добавляет в конец вектора элемент, значение которого равно параметру значение Глава 14.

Библиотека стандартных шаблонов Таблица 14<2 (продолжение) 4Рункция-член Описание чоь6 гевегче(в!ге 1уре число); чо!6 гев!ге(в!ге 1уре число, Т значение = Т(!); в!ге 1уре в!ге(! сспв1; чоЫ вчгар(чес1сг<Т, АИос а1ог> йобьект)11 1, В представленном ниже коротком примере показаны основные операции, которые можно выполнять при работе с вектором. 1п( па1п () чессог<(пс> ч; // создание вектора нулевой длины 1пс // вывод на экран размера исходного вектора ч соил « "Размео = " « ч.з1ге() « епс)1; номецение значений в конец вектора, по мере необходимости вектор будет расти 1от(1=01 1<10; 1++) ч.рпзП Ьас)г(1); вывод на экран текущего размера вектора ч соцт « "Новый размер = " « ч.ауге() «епд1; гечегве Иега1сг гЬед!пО; еапв1 гечегве Иега1ог гпед!и(! сопв1; гечегве Иегв1сг генг!Ц! сспв1 гечегве Иега1ег гепаЦ сопв1; // Основные операции вектора т!1т!с!п.т)е <1озгвеатл> ()1пс1пс(е <честог> цз!пя патпезрасе зСФ Возвращает обратный итератор конца вектора Возвращает обратный итератор начала вектора Устанавливает емкость вектора равной, по меньшей мере, параметру число элементов Изменяет размер вектора в соответствии с параметром число.

Если при этом вектор удлиняется, то добавляемые в конец вектора элементы получают значение, заданное параметром значение Возвращает хранящееся на данный момент в векторе число элементов Обменивает элементы, хранящиеся в вызывающем векторе, с элементами в объекте объект Самоучитель // вывод на экран содержимого вектора сопЕ « "Текущее содерзюмое: М"' Еог(1=0) 1<у.зтке[); Тн-) сонь « у[1, '« соцп « еде[1) помещение новых значений в конец вектора, // и опять по мере необходимости вектор будет расти ~от(1=07 1<10; 1++) ч.рпвй )васк (1+10); вывод на экран текущего размера вектора сонг « "новью размер = " « у. зажео « епс)1; вывод на экран содержтьмого вектора сонг « "текущее содержимое: ~п"; Йод(1=0; т ку.втже(); 1++) соцс « у[1] « соиь « епс)1; изменение содержимого вектора гог( 1=0; 1<и. зьке () ) 1++) у [1 ] = у [1] + у [1] // вывод на экран содержимого вектора сон « "удвоенное содержимое: Хп"; аког(з.=ог 1<у.з1ве()7 1е+) сорб « ъ[=] « м1 ™; соцб « епс11; гебцгп 0 После выполнения програм)4ы на экране появится следующее: Размер = о Новый размер = 10 Текущее содержимое: 0 1 2 3 4 5 6 7 8 9 Новый размер = 20 Текущее содержимое: О 1 2 3 4 5 б 7 8 9 10 11 12 13 14 15 16 17 18 19 удвоенное содержимое: О 2 4 б 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 Тщательно проанализируйте программу.

В функции п)аш() создается вектор ч для хранения целых. Поскольку не используется никакой инициализации, зто пустой вектор с равной нулю начальной емкостью, то есть это вектор нулевой длины. Этот факт подтверждается вызовом функции-члена яиц. Далее с помощью функции-члена рввЬ ЬасЩ к концу вектора у добавляется десять элементов. Чтобы разместить эти новые элементы, вектор у вынужден увеличиться. Как показывает выводимая на экран информация, его размер стал равным 10. После этою выводится содержимое вектора у.

Обратите внимание, что для этого используется обычный оператор индекса массива. Далее к вектору добав- Глава 14. Библиотека стандартных шаблонов 43? ляется еще десять элементов и, чтобы их разместить, вектор снова автоматически увеличивается. В конце концов, с помощью стандартного оператора индекса массива меняются значения элементов вектора.

В программе есть еще кое-что интересное. Отметьте, что функция т,зие0 указана прямо в инструкции организации цикла вывода на экран содержимого вектора т. Одним из преимуществ векторов по сравнению с массивами является то, что вы всегда имеете возможность определить текущий размер вектора. Очевидно, что такая возможность может оказаться полезной в самых разных ситуациях, 2. Кяк вы знаете, в С++ массивы и указатели очень тесно связаны. Доступ к массиву можно получить либо через оператор индекса, либо через указатель. По аналогии с этим в библиотеке стандартных шаблонов имеется тесная связь между векторами и итераторами.

Доступ к членам вектора можно получить либо через оператор индекса, либо через итератор. В следующем примере показаны оба этих подхода. Организация доступа к вектору с помощью итератора ()1пс1цс)е <1овггеап~> ()1пс1цс)е <лес ог> цв1пу пап~еврасе в~6; 1пс п~а1п ( ) чесгог<1пс> ч; 11 создание вектора нулевой длины 1пг 1; помещение зна ~ений в вектор аког (1-0; 1«10; 1++) ж.рцвЬ Ьас)» (1) /1 доступ к содержимому вектора с использованием оператора индекса лог(1=0; 1<10~ 1++) сонг « ж(1) « сонг « епс)1; /1 достуг.

к вектору через итератор чессог<1пв>:: )Сегасог р = >.Ье91п() ъЫ1е(р !=ъ,епс() ) ( соцс « *р р++; гегцгп О; После выполнения программы на экране появится следующее: 012345б789 012345б789 Самоучитель С++ 432 В этой программе тоже сначала создается вектор ч нулевой длины. Далее с помощью функции-члена ривЬ Ьас)(() к концу вектора ч добавляются некоторые значения и размер вектора ч увеличивается. Обратите внимание на объявление итератора р. Тип (тегатог определяется с помощью класса-контейнера.

То есть, чтобы получить итератор для выбранного контейнера, объявить его нужно именно так, как показано в примере: просто укажите перед типом (тега1ог имя контейнера. С помощью функции- глена ЬеязвО итератор инициализируется, указывая на начало вектора. Возвращаемым значением этой функции как раз и является итератор начала вектора. Теперь„применяя к итератору оператор инкремента, можно получить доступ к любому выбранному элементу вектора. Этот процесс совершенно аналогичен использованию указателя для доступа к элементам массива. С помощью функции-члена евдО определяется факт достижения конца вектора.

Возвращаемым значением этой функции является итератор того места, которое находится сразу за последним элементом вектора, Таким образом, если итератор р равен возвращаемому значению функции ч.епдО, значит, конец вектора был достигнут. 3. Помимо возможности размещения элементов в конце вектора, с помощью функции-члена!пяег(О их можно вставлять в его середину. Удалять элементы из вектора можно с помощью функции-члена егаяеО. // Демонстрация функций 1пзегс () и егаве О ()гпс1цое <1овтгеазп> ()1пс1цае <честог> цз)пя патпезрасе всс(т (п( зваз.п () чесгог<1пг> ч (5, 1) з // создание пятизлементного вектора // из единиц зпе з) вывод на экран исходных размера и содержимого вектора соцс « "Размер = " « ч.зз.ке() « епг)1; соцк « "Исходное содержимое:Хп") з.ог(1=0' 1<ч.я1ве()' 3++) соцс « ч[3) « соцс « епс)1; чессог<1пс>:зьпегатог р = ч.)зев и(); р += 2; // указывает на третий элемент вставка в вектор на то место, куда указывает итератор р десяти новых элементов, каждый из которых равен 9 ч.1пвегс(р, 10, 9) вывод на экран размера // и содержимого вектора после вставки соцс « "Размер после вставки = " « ч.в1ге О « епй1; 433 Глава 14.

Ьиблиотеии сгандаргныхшаблонов сопс « "Содержимое после вставки: ',и"; йог().=0; 1<ч.з(кс(); !++) соп1 « ч[11 « сонг « епд1г // удаление вставленных элементов р = ч.Ьец1пО; р ж= 2; // указывает на третий элемент ч.егазе(р, р+10); ~/ удаление следугвдх десяти элементов За элементом, на который указывает /1 итератор р вывод на экран размера // и содержимого вектора после удаления сопл « "Размер после удаления — " « ч.вбзе() « епс)1г сопс « "Содержимое после удаления:Чп"г йог(1=0; 1<ч.вхае(); 1++) сопв « ч[11 « сопл « епй1; геспгп 0; После выполнения программы на экране появится следующее: Размер = 5 Исходное содержимое: 11111 Размер после вставки = 15 Содержимое после вставки: 1! 9999999999111 Размер после удаления = 5 Содержимое после удаления: 11111 4. В следующем примере вектор используется для хранения объектов класса, определенного программистом.

Обратите внимание, что в классе определяются конструктор по умолчанию и перегруженные версии операторов < и ==. Помните, в зависимости от того, как реализована библиотека стандартных шаблонов для вашего компилятора, вам может понадобиться определить и другие операторы сравнения. // Хранение в векторе объектов пользовательского класса ((1пс1п<(е <1овсгеат> $1пс1ы<)е <чесгог> ыа1пц пагпсзрасе зМ; с1азз Вето ( <(опЫе <(; Самоучитель С++ риЬ11с: сепо () ( б = 0,0з ) Оепо (боззЬ1ех) ( б = х; ) крепо ьорегагог= (боаЬ1ех) о .= х; ге(;ззго *СЬ1аз ) бооЬ1е деобм (гепззггзаз ) Ьо11 орегаеог< (Везпо а, пепо )з) гегигзз а.де<б() < Ь.дегб()з ) Ьо11 орегасог — (ззепо а, (зепо Ь) ( гегзз г.

а.деьб() =.= Ь.дегб() з ттзг паьтз () ззес~ог<оепо> ззз (гз Г аког (1=0 з 1<10; 1++1 ч. раз)з ЬасК ( Оеп о (з /3.0) ) зог(1=0; Къ.е(хе Г) з з++1 соззг «т(11.детб() « " соззг « епб1з Гог(1=Оз 1<от.аьхе()з 1+-+) ч(11 = чу(1 .де б() 2.1; Гог(1=О) 1<з .етге Г) з соззг «< ч(Ц.дегб() <« '" "; гегззгп 0; После выполнения программы на экране появится следующее: О 0.333333 0.666667 1 1.33333 1.66667 2 2.33333 2.66667 3 О 0.7 1.4 2.1 2.8 3.5 4.2 4.9 5.6 6.3 1. Поэкспериментируйте с представленными примерами.

Попьпайтесь делать небольшие изменения в программах и исследуйте результаты. Глава 14. Библиотека стандартных шаблонов 2. В примере 4 для класса Оепю были определены два конструктора — конструктор по умолчанию (конструктор без параметров) и конструктор с параметрами. Сможете ли вы объяснить, почему это так важно? 3. Ниже представлен пример класса Соог(1. Напишите программу для хранения объектов типа Соог(1 в векторе. (Подсказка: не забудьте для класса Соогд определить операторы < и ==.) с1аяя соотб ряЬ11с: 1яя х, у; Соогс(() ( х = у .= О; ) Соотб(1от а, 1от Ь) ( х = а; у = Ь; 14.4.

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

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

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

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