Операция | Назначение |
lst.unique() | Удаляет дубликаты последо-вательных элементов, имеющих одинаковые значения |
lst.unique(op) | Удаляет дубликаты последо-вательных элементов, для которых операция ор() возвращает true |
lst.splice(pos,lst1) | Перемещает все элементы списка lst1 в список lst и раз-мещает их перед позицией итератора pos |
lst.splice(pos,lst1,pos1) | Перемещает элемент, зани-мающий позицию pos1 в списке lst1, в список lst и размещает его перед позицией итератора pos (списки lst и lst1 могут совпадать) |
lst.splice(pos,lst1, beg1,end1) | Перемещает все элементы интервала [beg1,end1) списка lst1 в список lst и размещает их перед позицией итератора pos списка lst (списки lst и lst1 могут совпадать) |
lst.sort() | Сортирует все элементы с помощью оператора < |
lst.sort(op) | Сортирует все элементы с помощью функционального объекта ор() |
lst.merge(lst1) | Если оба контейнера содержат упорядоченные элементы, пере-мещает все элементы списка lst1 в список lst, так что все элементы сливаются и остаются упорядоченными |
lst.merge(lstl,op) | Если оба контейнера содержат упорядоченные элементы, пере-мещает все элементы списка lst1 в список lst, так что все элементы сливаются и остаются упорядоченными в соответ-ствии с критерием op() |
lst.reverse() | Изменяет порядок следования всех элементов на противо-положный |
Рассмотрим пример программы с использованием двунаправленного списка целочисленных элементов, однонаправленного и реверсивного итераторов для списка.
// Листинг 26.1
#include<iostream>
#include <list>
#include <functional>
using namespace std;
int main()
{
setlocale(LC_CTYPE,"Russian");
int arr[5] = { -1, 3, 5, 8, 2 };
// Конструкторы
list<int> lst; //создание пустого списка
//создание списка из 10 элементов
//(по умолчанию 0)
list<int> lst1(10);
//создание списка из десяти 2
list<int> lst2(10,2);
//создание одного списка
//на основе другого списка
list<int> lst3(lst2);
//создание списка на основе массива
list<int> lst4(arr,arr+5);
// Методы
cout<<"Size lst3 = "<<lst3.size()<<endl;
cout<<"Max Size lst3 = "
<<lst3.max_size()<<endl;
cout<<"Проверка списка на пустоту:"
<<endl;
if(lst.empty())
cout<<"1st is empty\n";
cout<<
"Сравнение двух списков на равенство:"
<<endl;
if (lst3 == lst2) cout<<"lst3==lst2\n";
else cout<<"lst3!=lst2\n";
lst = lst4; // Присваивание
//прямой итератор для списка
//с элементами типа int
list<int>::iterator ptr;
//выводим элементы списка
//в прямом порядке
cout<<"Прямой порядок:"<<endl;
for(ptr=lst.begin();ptr!=lst.end();ptr++)
cout<<*ptr<< " ";
cout<<endl;
//обратный итератор для списка
//с элементами типа int
list<int>::reverse_iterator ptr1;
//выводим элементы списка
//в обратном порядке
cout<<"Обратный порядок: "<<endl;
for(ptr1=lst.rbegin();ptr1!=lst.rend();
ptr1++)
cout<<*ptr1<<" ";
cout<<endl;
// Сортировка по умолчанию (по возрастанию)
lst.sort();
cout<<"Сортировка по умолчанию
(по возрастанию):"<<endl;
for(ptr=lst.begin();ptr!=lst.end();ptr++)
cout<<*ptr<< " ";
cout<<endl;
cout<<"Добавление к отсортированному списку исходный список в конец"<<endl;
// Добавим исходный список в конец
lst.splice(lst.end(),lst4);
for(ptr=lst.begin();ptr!=lst.end();ptr++)
cout<<*ptr<< " ";
cout<<endl;
// Сортируем по убыванию
lst.sort(greater<int>());
cout<<"Сортировка по убыванию:"<<endl;
for(ptr=lst.begin();ptr!=lst.end();ptr++)
cout<<*ptr<< " ";
cout<<endl;
lst.unique(); // Удаляем дубликаты
cout<<"Удаление дубликатов:"<<endl;
for(ptr=lst.begin();ptr!=lst.end();ptr++)
cout<<*ptr<< " ";
cout<<endl;
lst.reverse(); //Обращение списка
cout<<"Обращение списка:"<<endl;
for(ptr=lst.begin();ptr!=lst.end();ptr++)
cout<<*ptr<< " ";
cout<<endl;
return 0;
}
Результаты выполнения программы:
Size lst3 = 10
Max Size lst3 = 357913941
Проверка списка на пустоту:
1st is empty
Сравнение двух списков на равенство:
lst3==lst2
Прямой порядок:
-1 3 5 8 2
Обратный порядок:
2 8 5 3 -1
Сортировка по умолчанию (по возрастанию):
-1 2 3 5 8
Добавление к отсортированному списку исходный список в конец
-1 2 3 5 8 -1 3 5 8 2
Сортировка по убыванию:
8 8 5 5 3 3 2 2 -1 -1
Удаление дубликатов:
8 5 3 2 -1
Обращение списка:
-1 2 3 5 8