Подготовительный курс по C++ разработке (std deque) Урок 22

Автор Elena Batratskaya
Подготовительный курс по C++ разработке (std deque) Урок 22

Всем привет.

Сегодня мы рассмотрим еще один последовательные контейнеры стандартной библиотеки. СТД дгд, что же — это такое в первую очередь как и остальные классы стандарт библиотеки — это шаблон мы можем параметризовать его любым типом которые мы хотим хранить в этом контейнере как стандартный так и пользовательский можно представить. СТДК как динамический массив статических массивов он выделяет сразу куски фиксированного размера и заполняет их последовательно нашими элементами как только пускай перед хватать он выделяет новый и помещает указатель на него свой динамический массив таким образом для того чтобы получить доступ к любому элементу нам достаточно высчитать в каком где он находится и разминаться указатель и посчитав его.

Яндекс про сниму доступ — это достигается за счёт того, что да хранит элементы последовательно как Ray или.

Вектор он умеет быстро вставлять элементы в начало и в конец то есть 2 — это двусторонняя очередь. Отсюда и название вставка в середину у него не хуже чем у вектора для этого ему достаточно передвинуть или который ближе к одному или ко второму концу и доставить туда элемент мы рассмотрим подробнее как — это происходит. Кроме того он умеет не только быстро вставлять в оба конца. Ну и удалять оттуда как же выглядит. СТДК представим, что тот столбик синего цвета слева — это тот самый динамический массив на статические массивы мы заполняемых последовательно начало езды 101, а последний заполняется от начала к концу стрелками показано направление заполнения этого контейнера, что если мы захотим вставить элемент в конец D при условии, что последний кусок данных уже за полностью заполнен для этого ему нужно будет выделить новый кусок. Добавить его в список своих кусочков и добавить его первым элемент в этот небольшой. Вектор при удаление элемента из дико например из середины D перемещает элементы которые ближе к одному из его концов в нашем примере ближе к началу мы удаляем элементы ближе к началу и. Дик перемещает эти элементы на его место стрелками указаны переходы элементов. Таким образом он обеспечивает выполнение нашей операции. Давайте посмотрим, что мы можем делать с осадок на примере небольшого куска кода для того чтобы мы смогли использовать класс. Мы должны подключить заголовочный файл. Дык я сразу подключу его Stream для того чтобы мы могли наблюдать за выводом денег его свойства объявление объекта. Типа так не отличается от объявление объекта других контейнеров мы пишем. СТДК параметризуемые этот шаблон типом которые мы хотим в нём хранить и создать. Вектор на данном этапе виды капуст — это мы можем проверить либо с помощью вызова метода сайт который должен вернуть 0 либо с помощью вызова метода empty который проверяет контейнер на его пустоту сейчас мы должны увидеть единицу так и есть мы можем вставлять в. ДК элементы как в конец наподобие вектора так и начала сейчас у нас в дети должны быть два элемента давайте — это проверим так и есть, что если мы хотим пройтись поэт вывести все его элементы — это можно сделать двумя способами 1 с помощью Range for Range based for. Прошу прощения с уже известной нам записи мы можем пройтись по контейнеру и вывести все его элементы второй вариант использовать. Фракцию итераторов как мы писали например до 11 плюсов, но тут я смотрю используют ключевое слово авто мы два раза вывели содержимое нашего контейнера как. Мы помним из занятия по. СТБ вектору он может разрастаться до размеров своей ёмкости таким образом чтобы не используемые элементы занимались существенную часть памяти тоже самое справедливо и для. ДК Поэтому у него тоже есть метод shrink-to-fit которое заставляет его возвращать не ест память системе. Но в отличие от вектора у него отсутствует метод резерв он ему не очень нужен равно как и пока по сети. Кроме этого мы можем очищать наждак мы можем вставлять в. Дык элементы в произвольное место например. Ну можем удалять элементы из. Вектора из. ДК прошу прощения мы можем очень быстро и удобно помимо вставки в начало и в конец удалять элементы из начала и конца. Итак о чём мы должны помнить о том что. Дык предоставляет нам почти все те же свойства которые есть у вектора за исключением более оптимальной вставки в начало и в конец так как может расширять в обе стороны нам достаточно двигатель не все элементы как — это делают вектор. А только те которые ближе к одному из его концов. Итак подведем небольшой итог о чем нужно помнить при работе с. Астаны так хотелось бы отметить что. СТДК редко когда используется как самостоятельный класс обычно его использовать как базу для реализации некоторых адаптера std Stack. Это доставка реализует семантику Last Input First Out последний первый вышел можно представить себе — это как стопка бумаги тот который мы положили последнем первом же мы и возьмём. Когда нам этом будет нужна. СТДК испечь. Вьетнам быструю ставку и удаление на обоих концах коллекции как начала так и в конце в отличие от std Vector который такую гарантию даёт только конец вставка и удаление в середине гарантированно двигать. Только половину элементов то есть мы должны будем сдвинуть не все элементы в коллекции если мы вставляем в отличие вектора от только те которые ближе к одному из его концов либо к началу либо концу и в отличие от std Vector расширение размеры контейнера не требует копирование. Всех элементов если мы пытаемся ставить в. СТДК который уже заполнен ему достаточно просто выделить но.

0 комментариев
0

Читайте также