Void main(). list<int>::iterator i, j, k;

{

list<int> L1;

list<int>::iterator i, j, k;

int m;

for (m = 0; m<5; m++)L1.push_back(m + 1);

for (m = 12; m<14; m++)L1.push_back(m);

cout << "Початковий список:";

for (i = L1.begin(); i != L1.end();++i)

cout << *i << " ";

cout << endl;

i = L1.begin(); i++;

k = L1.end();

j = --k; k++; j -- ;

L1.splice( i, L1, j , k);

cout << "Список після зчеплення:";

for ( i = L1.begin(); i != L1.end(); ++i)

cout << *i << " ";

}

 

Результат роботи програми:

Початковий список: 1 2 3 4 5 12 13

Список після зчеплення: 1 12 13 2 3 4 5

 

Для ітераторів списків не визначені операції складання і віднімання, тобто не можна написати j = k – 1, тому довелося скористатися допустимими для ітераторів списків операціями інкремента і декремента. У загальному випадку для пошуку елементу в списку використовується функція find().

Для видалення елементу по його значенню застосовується функція remove:

 

void remove(const Т& value);

 

Якщо елементів із значенням value в списку декілька, всі вони будуть видалені. Можна видалити із списку елементи, що задовольняють деякій умові.

Для цього використовується функція remove_if():

 

template <class Predicate>

void remove_if(Predicate pred);

Параметром є клас-предикат, який задає умову, що накладається на елемент списку. Предикати будуть розглянуті нижче.

Для впорядковування елементів списку використовується метод sort:

 

void sort();

template <class Compare> void sort(Compare comp);

 

У першому випадку список сортується за збільшенням елементів (відповідно до визначення операції < для елементів), в другому – відповідно до функціонального об'єкту Compare. Функціональний об'єкт має значення true, якщо два передаваних йому значення повинні при сортуванні залишитися в попередньому порядку, та false – навпаки. Порядок проходження елементів, що мають однакові значення, зберігається. Час сортування пропорційний N*log2n, де N – кількість елементів в списку.

Метод unique() залишає в списку тільки перший елемент з кожної серії тих, що йдуть підряд однакових елементів. Перша форма методу має наступний формат:

 

void unique();

 

Друга форма методу unique() використовує як параметр бінарний предикат, що дозволяє задати власний критерій видалення елементів списку. Предикат має значення true, якщо критерій дотриманий, і false – в іншому випадку. Аргументи предиката мають тип елементів списку:

 

template <class BinaryPredicate>

void unique(BinaryPredicate binary_pred);

 

Для злиття списків призначений метод merge():

 

void merge(list<T>& x);

template <class Compare>

void merge(list<T>& x, Compare comp);

 

Обидва списки мають бути впорядковані (у першому випадку відповідно до визначення операції < для елементів, в другому – відповідно до функціонального об'єкту Compare). Результат – впорядкований список. Якщо елементи в списку, який викликає функцію та в списку-параметрі збігаються, першими розташовуватимуться елементи із списку, який викликає функцію.

Метод reverse() призначений для зміни порядку проходження елементів списку на зворотній:

 

void reverse();

 

Приклад.

 

#include <iostream>

#include <list>

using namespace std;

 

void show (const char *str, const list<int> &L)

{

cout << str <<":"<< endl;

for (list<int>::const_iterator i = L.begin();

i != L.end(); ++i)

cout << *i <<" ";

cout << endl;

}

 








Дата добавления: 2014-12-26; просмотров: 778;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.