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

6.2. Списки

обеспечивает изящный способ инициализировать вектор от C ++ множество, следующим образом.

интервал [] =2, 5,-3, 8, 6; //C ++ множество 5 целых чисел

вектор <интервал> V (A, A+5); //V = (2, 5,-3, 8, 6)

253

Даже при том, что указатели A и + 5 не являются STL iterators через волшебство арифметики указателя, они по существу ведут себя, как будто они были. Эта та же самая уловка может использоваться, чтобы инициализировать любой из контейнеров последовательности STL.

Векторы STL и алгоритмы

В дополнение к вышеупомянутым членским функциям для векторов STL также обеспечивает STL

много алгоритмов, которые воздействуют на контейнеры в целом и векторы в partic-ular. Чтобы получить доступ к этим функциям, используйте включать заявление «#include <алгоритм>». Позвольте p и q быть iterators по некоторому основному типу и позволить e обозначить объект этого основного типа. Как выше, эти операции относятся к диапазону iterator [p, q), который начинается в p и заканчивается только до q.

вид (p, q): Сортируйте элементы в диапазоне от p до q в возрастании

заказ. Предполагается, что меньше оператор (» <») является de - оштрафованный за основной тип.

случайный shuffle (p, q): Перестройте элементы в диапазоне от p до q в, бежал -

заказ dom.

перемена (p, q): Полностью измените элементы в диапазоне от p до q.

найдите (p, q, e): Возвратите iterator к первому элементу в диапазоне от p

к q, который равен e; если e не найден, q возвращен.

минимальный элемент (p, q): Возвратите iterator к минимальному элементу в диапазоне

от p до q.

макс. элемент (p, q): Возвратите iterator к максимальному элементу в диапазоне

от p до q.

для каждого (p, q, f): Примените функцию f элементы в диапазоне от p до

q.

Например, чтобы сортировать весь вектор V, мы использовали бы вид (V.begin (), V.end ()). К виду просто первые 10 элементов, мы могли использовать вид (V.begin (), V.begin () + 10).

Все вышеупомянутые функции поддержаны для STL deque. Все вышеупомянутые функции, кроме вида и случайного shuffle поддержаны для списка STL.

Иллюстративный пример

В Кодовом Фрагменте 6.16, мы предоставляем короткую программу в качестве примера функционального -

ity векторного класса STL. Программа начинается с необходимого «#include»

254

Глава 6. Список и Iterator ADTs заявления. Мы включаем <вектор>, для определений векторов и iterators и <алгоритма>, для определений вида и случайного shuffle.

Мы сначала инициализируем стандарт C ++ множество, содержащее шесть целых чисел, и мы тогда используем находящегося в iterator конструктора, чтобы создать вектор с шестью элементами, содержащий эти ценности. Мы показываем, как использовать членский размер функций, популярность назад, пододвинуть обратно, выходите, и назад. Заметьте что, суя уменьшения размер множества и выдвигая увеличения размер множества. Мы тогда показываем, как использовать iterator арифметику, чтобы сортировать часть вектора, в этом случае, первых четырех элементов. Требование к стереть членской функции удаляет два из последних четырех элементов вектора. После удаления оставление двумя элементами в конце было перемещено вперед, чтобы заполнить пустые положения.

Затем, мы демонстрируем, как произвести вектор знаков. Мы применяем функцию случайный shuffle, чтобы переставить элементы вектора беспорядочно. Наконец, мы показываем, как использовать членскую вставку функции, чтобы вставить характер при начинании - ning вектора. Наблюдайте, как другие элементы перемещены вправо.

#include

<cstdlib>

//

обеспечивает ВЫХОДНОЙ УСПЕХ

#include

<iostream>

//

Определения ввода/вывода

#include

<вектор>

//

обеспечивает вектор

#include

<алгоритм>

//

для вида, случайного shuffle

использование namespace станд.;

международное основное ()

интервал [] =17, 12, 33, 15, 62, 45;

вектор <интервал> v (a, + 6);

суд <<v.size () <<endl; v.pop назад (); суд <<v.size () <<endl; v.push назад (19);

//сделайте станд.:: доступный

//v: 17 12 33 15 62 45//продукция: 6//v: 17 12 33 15 62//продукция: 5//v: 17 12 33 15 62 19

суд <<v.front () <<«» <<v.back () <<endl;//продукция: 17 19

вид (v.begin (), v.begin () + 4);

v.erase (v.end ()- 4, v.end ()- 2);

суд <<v.size () <<endl;

случайная работа b [] ='b', 'r', 'v', 'o';

вектор <случайная работа> w (b, b + 5);

случайный shuffle (w.begin (), w.end ()); w.insert (w.begin ()',);

//v: (12 15 17 33) 62 19//v: 12 15 62 19//продукция: 4

/ / w: b r v o / / w: o v r b / / w: s o v r b

для (вектор <случайная работа>:: iterator p = w.begin (); p! = w.end (); ++ p)

единое время co <<* p <<«»; //продукция: s o v r b co единое время <<e ndl; возвратите ВЫХОДНОЙ УСПЕХ;

Кодовый Фрагмент 6.16: пример использования вектора STL и iterators.