Специальные модифицирующие операции

Операция Назначение
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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: