Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
7
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

22.4.2. Сортування списку

Список можна відсортувати за допомогою функції-члена класу sort(). У процесі виконання наведеної нижче програми створюється список випадково вибраних цілих чисел, який потім упорядковується за збільшенням їх значень.

Код програми 22.8. Демонстрація механізму сортування списку

#include <iostream> // Для потокового введення-виведення

#include <list> // Для роботи зі списками

#include <cstdlib> // Для використання бібліотечних функцій

using namespace std; // Використання стандартного простору імен

int main()

{

list<int> lst; // Створення порожнього списку

int i;

// Створення списку випадково вибраних цілих чисел

for(i=0; i<10; i++) lst.push_back(rand());

// Відображення початкового вмісту списку

cout << "Початковий вміст списку:\n";

list<int>::iterator p = lst.begin();

while(p != lst.end()) {

cout << *p << " ";

p++;

}

cout << endl << endl;

// Сортування списку.

lst.sort();

// Відображення відсортованого вмісту списку

cout << "Відсортований вміст списку:\n";

p = lst.begin();

while(p != lst.end()) {

cout << *p << " ";

p++;

}

cout << endl;

getch(); return 0;

}

Ось як може виглядати один з можливих варіантів виконання цієї програми.

Початковий вміст списку:

41 18467 6334 26500 19169 15724 11478 29358 26962 24464

Відсортований вміст списку:

41 6334 11478 15724 18467 19169 24464 26500 26962 29358

22.4.3. Об'єднання одного списку з іншим

Один впорядкований список можна об'єднати з іншим. Як результат ми отримаємо впорядкований список, який охоплює вміст двох початкових списків. Новий список залишається у списку, який його викликає, а другий список стає порожнім. У наведеному нижче прикладі виконується об'єднання двох списків. Перший список містить букви ACEGI, а другий – букви BDFHJ. Ці списки потім об'єднуються, внаслідок чого утворюється впорядкована послідовність букв ABCDEFGHIJ.

Код програми 22.9. Демонстрація механізму об'єднання двох списків

#include <iostream> // Для потокового введення-виведення

#include <list> // Для роботи зі списками

using namespace std; // Використання стандартного простору імен

int main()

{

list<char> lst1, lst2; // Створення двох порожніх списків

int i;

// Створення двох списків з випадково вибраними цілими числами

for(i=0; i<10; i+=2) lst1.push_back('A'+i);

for(i=1; i<11; i+=2) lst2.push_back('A'+i);

// Відображення початкового вмісту першого списку

cout << "Вміст списку lst1: ";

list<char>::iterator p = lst1.begin();

while(p != lst1.end()) {

cout << *p;

p++;

}

cout << endl << endl;

// Відображення початкового вмісту другого списку

cout << "Вміст списку lst2: ";

p = lst2.begin();

while(p != lst2.end()) {

cout << *p;

p++;

}

cout << endl << endl;

// Тепер об'єднуємо ці два списки.

lst1.merge(lst2);

if(lst2.empty()) cout << "Список lst2 тепер порожній.\n";

// Відображення об'єднаного вмісту першого списку

cout << "Вміст списку lst1 після об'єднання:\n";

p = lst1.begin();

while(p != lst1.end()) {

cout << *p << " ";

p++;

}

cout << endl;

getch(); return 0;

}

Результати виконання цієї програми є такими:

Вміст списку lst1: ACEGI

Вміст списку lst2: BDFHJ

Список lst2 тепер порожній.

Вміст списку lst1 після об'єднання:

A B C D E F G H I J