Программирование >>  Операторы преобразования типа 

1 ... 50 51 52 [ 53 ] 54 55 56 ... 239


Операции над списками

Операции создания, копирования и уничтожения

Список ]1оддерживает такой же набор операций создания, копирования и уничтожения, как и все остальные последовательные контейнеры. Конструкторы и деструкторы списков перечислены в табл. 6.12. Некоторые из возможных источников инициализации упоминаются на с. 154.

Таблица 6.12. Конструкторы и деструкторы списков

Операция

Описание

list<Elem> с list<Elem> с1(с2)

list<Elem> с(п) list<Elem> c(n,elem) list<Elem> c(beg,end) c.~list<Elem>()

Создает пустой список, не содержащий ни одного элемента

Создает копию другого списка того же типа (с копированием всех элементов)

Создает список из п элементов, создаваемых конструктором по умолчанию Создает список, инициализируемый п копиями элемента elem Создает список, инициализируемый элементами интервала [beg,end) Уничтожает все элементы и освобождает память

Немодифицирующие операции над списками

Списки поддерживают стандартный набор операций для определения размера и сравнения. Эти операции перечислены в табл. 6.13, а подробные описания отдельных операций можно найти на с. 153.

Таблица 6.13. Немодифицирующие операции над списками

Операция

c.sizeO C.emptyO

c,max size() cl == c2 cl! = c2 d < c2 cl > c2 cl <= c2 cl >= c2

Описание

Возвращает фактическое количество элементов

Проверяет, пуст ли контейнер (эквивалент sizeO==0, но иногда выполняется быстрее)

Возвращает максимально возможное количество элементов Проверяет равенство с1 и с2

Проверяет неравенство с1 и с2 (эквивалент 1(с1==с2)) Проверяет, что с1 меньше с2 Проверяет, что с1 больше с2 (эквивалент с2<с1) Проверяет, что с1 не больше с2 (эквивалент !(с2<с1)) Проверяет, что с1 не меньше с2 (эквивалент !(с1<с2))

Присваивание

Списки также поддерживают обычный набор операций присваивания для последовательных коптейнерюп (табл. 6.14).



Списки

Таблица 6.14. Операции присваивания для списков

Операция

Описание

с1 = с2

c.asslgn(n,elem) c.assign(beg,end) cl.swap(c2) swap(cl,c2)

Присваивает cl все элементы с2 Присваивает п копий элемента elem Присваивает элементы интервала [beg,end) Меняет местами содержимое с1 и с2 То же, но в форме глобальной функции

Как обычно, операции присваивания соответствуют конструкторам с разными источниками инициализации (см. с. 153).

Обращение к элементам

Поскольку списки не поддерживают произвольный доступ к элементам, для прямого обращения к элементам в них предусмотрены функции front() и Ьаск(), представленные в табл. 6.15.

Таблица 6.15. Операции прямого обращения к элементам списка Операция Описание

C.frontO Возвращает первый элемент (без проверки его существования!)

с,Ьаск() Возвращает последний элемент (без проверки его существования!)

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

std::l1st<Elem> coll: Пустой список!

std::cout coll.frontO: ОШИБКА ВРЕМЕНИ ВЫПОЛНЕНИЯ

If (!со11 .emptyO) {

std;:cout coll.backO; OK

Функции получения итераторов

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



Таблица 6.16. Операции получения итераторов

Операция Описание

C.beginO Возвращает двунаправленный итератор для первого элемента

C.endO Возвращает двунаправленный итератор для позиции за последним

элементом

C.rbeginO Возвращает обратный итератор для первого элемента при переборе

в обратном направлении

C.rendO Возвращает обратный итератор для позиции за последним элементом

при переборе в обратном направлении

Вставка и удаление элементов

в таб.л. 6.17 перечислены операции вставки и удаления элементов в списках. Списки поддерживают все функции деков, а также специальные реализации алгоритмов removeO и remove if(). Как это обычно бывает при использовании STL, правильность аргументов обеспечивается вызывающей стороной. Итераторы должны ссылаться на правильные позиции, конец интервала не должен предшествовать началу, элементы не должны удаляться из пустого контейнера.

Таблица 6.17. Операции вставки и удаления для списков Операция Описание

c.insert(pos,elem) Вставляет копию elem в позицию итератора pos и возвращает позицию нового элемента

c.lnsert(pos,n,elem) Вставляет п копий elem в позицию итератора pos (и не возвращает значения)

c.insert(pos,beg,end) Вставляет копию всех элементов интервала [beg,end) в позицию итератора pos (и не возвращает значения)

c.push back(elem) Присоединяет копию elem в конец списка

с.рор ЬаскО Удаляет последний элемент (не возвращая его)

c.push front(elem) Вставляет копию elem в начало списка

c.pop frontO Удаляет первый элемент (не возвращая его)

c.remove(val) Удаляет все элементы со значением val

c.remove if(op) Удаляет все элементы, для которых op(elem) возвращает true

c.erase(pos) Удаляет элемент в позиции итератора pes и возвращает позицию

следующего элемента

c.erase(beg,end) Удаляет все элементы из интервала [beg,end) и возвращает позицию следующего элемента

c.resize(num) Приводит контейнер к раэмеру num (если sIzeO при этом увеличивается,

новые элементы создаются своим конструктором по умолчанию)

c.resize(num,elem) Приводит контейнер к размеру num (если sizeO при этом увеличивается, новые элементы создаются как копии elem)

C.clearO Удаляет все элементы (контейнер остается пустым)



1 ... 50 51 52 [ 53 ] 54 55 56 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика