Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

6.2. Списки

247

Есть число других улучшений, которые могли быть добавлены к нашему imple-процессу мышления NodeList, такого как лучшая проверка на ошибки, более сложный набор конструкторов и оператора постприращения для iterator класса.

Вы могли бы задаться вопросом, почему мы приняли решение определить конец функции iterator, чтобы возвратить воображаемое положение, которое находится только вне конца списка, а не последнего узла списка. Этот выбор предлагает много преимуществ. Во-первых, это хорошо определено, даже если список пуст. Во-вторых, вставка функции (p, e) может использоваться, чтобы вставить новый элемент в любом положении списка. В частности возможно вставить элемент в конце списка, призывая вставку (конец (), e). Если бы мы вместо этого определили конец, чтобы возвратить последнее положение списка, это не было бы возможно, и единственный способ вставить элемент в конце списка будет через функцию insertBack.

Заметьте, что наше внедрение довольно эффективно относительно обоих времени и пространства. Все операции списка ADT бегут вовремя O (1). (Единственные исключения к этому - опущенные вспомогательные функции, печь для сжигания отходов производства, копируют конструктора и оператора назначения. Они требуют O (n) время, где n - ряд элементов в списке.) Пространство, использованное по условию, структура пропорциональна ряду элементов в списке.

6.2.4 Списки STL

C ++ Стандартная Библиотека Шаблона обеспечивает внедрение списка, который является

названный список. Как вектор STL, список STL - пример контейнера STL. Как в нашем внедрении класса NodeList, список STL осуществлен как вдвойне связанный список.

Чтобы определить объект быть списка типа, необходимо сначала включать соответствующий системный файл определения, который просто называют «списком». Как с вектором STL, класс списка - член станд. namespace, любой необходимо снабдить ссылки предисловием на него с namespace оператором резолюции, как в «станд.:: перечислите», или предоставлять соответствующее заявление использования. Класс списка - templated с основным типом отдельных элементов. Например, кодовый фрагмент ниже объявляет список floats. По умолчанию первоначальный список пуст.

#include <список>

использование станд.:: список; //входят в список доступный <float> myList списка; //пустой список floats

Ниже список основных членских функций класса списка. Позвольте L, как объявлять, быть списком STL некоторого основного типа и позволять x обозначить единственный объект этого того же самого основного типа. (Например, L - список целых чисел, и e - целое число.)

список (n): Постройте список с n элементами; если никакой список аргументов не

данный, пустой список создан.

размер (): Возвратите ряд элементов в L.

248

Глава 6. Список и Iterator adTs

пустой (): Возвратитесь верный, если L пустой и ложный иначе.

фронт (): Возвратите ссылку на первый элемент L. назад (): Возвратите ссылку на последний элемент L.

выдвиньте фронт (e): Вставка копия e в начале L. пододвигает (e) обратно: Вставьте копию e в конце L.

суйте фронт (): Удалите элемент кулака популярности L. назад (): Удалите последний элемент L.

Функции выдвигают фронт и пододвигают обратно, эквиваленты STL нашего func-tions insertFront и insertBack, соответственно, нашего списка ADT. Точно так же func-tions популярный фронт и популярность назад эквивалентны соответствующим функциям eraseFront и eraseBack.

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

6.2.5 STL Containers и Iterators

Чтобы развить более полное понимание векторов STL и списков, это необходимо

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

Вектор Контейнера STL deque l i приоритетных очередей очереди стека Св. установил (и мультинабор) карту (и мультикарту)

Вектор описания Дважды закончился, Метод «последним пришел - первым вышел» Списка очереди складывают Приоритетный Набор очереди очереди Метода «первым пришел - первым вышел» (и мультиустанавливают), Карта (и мультиконтурная карта)

Различные контейнеры организуют свои элементы по-разному, и следовательно глоток - порт различные методы для доступа к отдельным элементам. STL iterators обеспечивают относительно однородный метод для доступа и перечисления элементов, сохраненных в контейнерах.

Прежде, чем ввести, как работа iterators для контейнеров STL, давайте начнем с простой функции, которая суммирует элементы вектора STL, обозначенного V, показанный в