Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МП (Практические занятия 1, 2, 3).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
637.44 Кб
Скачать

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

Операция

Назначение

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