На этом шаге мы приведем общие сведения о списках.
Класс 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.
Функция-член | Описание |
---|---|
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 |
На следующем шаге мы рассмотрим базовые операции над списком.