Шаг 9.
Библиотека STL.
Списки

    На этом шаге мы приведем общие сведения о списках.

    Класс list поддерживает функционирование двунаправленного линейного списка. В отличие от вектора, в котором реализована поддержка произвольного доступа, список позволяет получать к своим элементам только последовательный доступ. Двунаправленность списка означает, что доступ к его элементам возможен в двух направлениях: от начала к концу и от конца к началу.

    Шаблонная спецификация класса list выглядит следующим образом.

Template <class T, class Allocator = allocator<T>> class list

    Здесь T - тип данных, сохраняемых в списке, а элемент Allocator означает распределитель памяти, который по умолчанию использует стандартный распределитель.

  explicit list (const Allocator &a = Allocator() );
  explicit list (size_type num, const T &val = T(), 
           const Allocator &a = Allocator() );
  list (const list<T, Allocator> &ob);
  template <class InIter>list(InIter start, InIter end, 
           const Allocator &a = Allocator());

    Конструктор, представленный в первой форме, создает пустой список. Вторая форма предназначена для создания списка, который содержит num элементов со значением val. Третья создает список, который содержит элементы в диапазоне, заданном параметрами start и end. Для класса list определены следующие операторы сравнения: ==, <, <=, !=, > и >=. Функции-члены, определенные в классе list, перечислены в таблице 1.

Таблица 1. Функции-члены, определенные в классе list
Функция-член Описание
template <class InIter>
void assign(InIter start, InIter end);
Помещает в список последовательность, определяемую параметрами start и end
void assign (size_type num, const T &val); Помещает в список num элементов со значением val
reference back();
const_reference back() const;
Возвращает ссылку на последний элемент в списке
iterator begin();
const_iterator begin() const;
Возвращает итератор для первого элемента в списке
void clear(); Удаляет все элементы из списка
bool empty() const; Возвращает истинное значение, если используемый список пуст, и ложное в противном случае
const_iterator end() const;
iterator end();
Возвращает итератор, соответствующий концу списка
iterator erase (iterator i); Удаляет элемент, адресуемый итератором i; возвращает итератор, указывающий на элемент, расположенный после удаленного
iterator erase (iterator start, iterator end); Удаляет элементы в диапазоне, задаваемом параметрами start и end; возвращает итератор для элемента, расположенного за последним удаленным элементном
reference front();
const_reference front() const;
Возвращает ссылку на первый элемент в списке
allocator_type get_allocator() const; Возвращает распределитель памяти списка
iterator insert (iterator i, const T &val = T()); Вставляет значение val непосредственно перед элементом, заданным параметром i; возвращает итератор для этого элемента
void insert (iterator i, size_type num, const T &val); Вставляет num копий значения val непосредственно перед элементом, заданным параметром i
template <class InIter>
void insert( iterator i, InIter start, InIter end);
Вставляет в список последовательность, определяемую параметрами start и end, непосредственно перед элементом, заданным параметром i
size_type max_size() const; Возвращает максимальное число элементов, которое может содержать список
void merge( list<T, Allocator> &ob);
template <class Comp>
void merge( list<T, Allocator> &ob, Comp cmpfn);
Объединяет упорядоченный список, содержащийся в объекте ob, с вызывающим упорядоченным списком. Результат также упорядочивается. После объединения список, содержащийся в ob, остается пустым. Во второй форме может быть задана функция сравнения, которая определяет, при каких условиях один элемент меньше другого
void pop_back(); Удаляет последний элемент в списке
void pop_front(); Удаляет первый элемент в списке
void push_back(const T &val); Добавляет в конец списка элемент со значением, заданным параметром val
void push_front(const T &val); Добавляет в начало списка элемент со значением, заданным параметром val
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
Возвращает реверсивный итератор для конца списка
reverse_iterator rend();
const_reverse_iterator rend() const;
Возвращает реверсивный итератор для начала списка
void remove(const T &val); Удаляет из списка элементы со значением val
template <class UnPred>
void remove_if(UnPred pr);
Удаляет элементы, для которых унарный предикат pr равен значению true
void resize(size_type num, T val = T()); Устанавливает размер списка равным значению, заданному параметром num. Если список для этого нужно удлинить то в конец списка добавляются элементы со значением, заданным параметром val
void reverse(); Реверсирует список
size_type size() const; Возвращает текущее количество элементов в списке
void sort();
template <class Comp>
void sort(Comp cmpfn);
Сортирует список. Вторая форма сортирует список с помощью функции сравнения cmpfn, которая позволяет определять, при каких условиях один элемент меньше другого
void splice(iterator i,list<T, Allocator> &ob); Вставляет содержимое списка ob в вызывающий список в позиции, указанной итератором i. После выполнения этой операции список ob остается пустым
void splice(iterator i, list<T, Allocator> &ob, iterator el); Удаляет из списка ob элемент, адресуемый итератором el, и сохраняет его в вызывающем списке в позиции, адресуемой итератором i
void splice(iterator i, list<T, Allocator> &ob,iterator start, iterator end); Удаляет из списка ob диапазон, определяемый параметрами start и end, и сохраняет его в вызывающем списке, начиная с позиции, адресуемой итератором i
void swap( list<T, Allocator> &ob); Выполняет обмен элементами вызывающего списка и списка ob
void unique();
template <class BinPred>void unique(BinPred pr);
Удаляет из списка элементы-дубликаты. Вторая форма для определения уникальности использует предикат pr

    На следующем шаге мы рассмотрим базовые операции над списком.




Предыдущий шаг Содержание Следующий шаг