Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторний практикум з ООП в Visual Studio.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.95 Mб
Скачать

I. Операції, що не модифікують.

for_earch() виконує операції для кожного елемента послідовності

find() знаходить перше входження значення в послідовність

find_if() знаходить першу відповідність предикату в послідовності

count() підраховує кількість входжень значення в послідовність

count_if() підраховує кількість виконань предиката в послідовності

search() знаходить перше входження послідовності як підпослідовності

search_n() знаходить n-і входження значення в послідовність

II. Операції, що модифікують.

copy() копіює послідовність, починаючи з першого елемента

swap() міняє місцями два елементи

replace() заміняє елементи із зазначеним значенням

replace_if() заміняє елементи при виконанні предиката

replace_copy() копіює послідовність, заміняючи елементи із зазначеним значенням

replace_copy_if() копіює послідовність, заміняючи елементи при виконанні предиката

fill() заміняє всі елементи даним значенням

remove() видаляє елементи з даним значенням

remove_if() видаляє елементи при виконанні предиката

remove_copy() копіює послідовність, видаляючи елементи із зазначеним значенням

remove_copy_if() копіює послідовність, видаляючи елементи при виконанні предиката

reverse() міняє порядок проходження елементів на зворотний

random_shuffle() переміщає елементи відповідно до випадкового рівномірного розподілу (“тасує” послідовність)

transform() виконує задану операцію над кожним елементом послідовності

unique() видаляє рівні сусідні елементи

unique_copy() копіює послідовність, видаляючи рівні сусідні елементи

III. Сортування.

sort() сортує послідовність із гарної середньої ефективністю

partial_sort() сортує частину послідовності

stable_sort() сортує послідовність, зберігаючи порядок слідування рівних елементів

lower_bound() знаходить перше входження значення у відсортованій послідовності

upper_bound() знаходить перший елемент, більший чим задане значення

binary_search() визначає, є чи даний елемент у відсортованій послідовності

merge() зливає дві відсортовані послідовності

IV. Робота з множинами.

includes() перевірка на входження

set_union() об'єднання множин

set_intersection() перетинання множин

set_difference() різниця множин

V. Мінімуми й максимуми.

min() менше із двох

max() більше із двох

min_element() найменше значення в послідовності

max_element() найбільше значення в послідовності

VII. Перестановки.

next_permutation() наступна перестановка в лексикографічному порядку

pred_permutation() попередня перестановка в лексикографічному порядку

13.4. Зразок виконання роботи

З допомогою об’єкту типу string збережіть в списку наступні стрічки: один, шість, два, сім, три, вісім, чотири, дев’ять, п’ять, десять. Потім відсортуйте список і виведіть на екран вмістиме відсортованого списку. Використовуючи алгоритми STL: 1) підрахуйте в обраному елементі масиву типу string кількість символів в нижньому регістрі і виведіть це число на екран; 2) об’єднайте список і масив у єдиний контейнер vector і виведіть його елементи на екран.

#include "stdafx.h"

#include <iostream>

#include <string.h>

#include <conio.h>

#include <list.h>

#include <vector>

#include <algorithm>

#include <cctype>

using namespace std;

int main()

{ setlocale( LC_ALL,"Ukrainian" );

list<string> str;

str.push_back(string("один"));

str.push_back(string("шість"));

str.push_back(string("два"));

str.push_back(string("сім"));

str.push_back(string("три"));

str.push_back(string("вісім"));

str.push_back(string("чотири"));

str.push_back(string("девять"));

str.push_back(string("пять"));

str.push_back(string("десять"));

list<string>::iterator p=str.begin();

while (p!=str.end())

{

cout<<*p;cout<<" ";

p++;

}

cout<<endl;

str.sort();

list<string>::iterator pp=str.begin();

while (pp!=str.end())

{

cout<<*pp;cout<<" ";

pp++;

}

cout<<endl;

string a[2]; int ii=0;

while (ii!=3)

{

cout<<"Введiть стрiчку:";

cin>>a[ii];

ii++;

}

int i=count_if(a[1].begin(),a[1].end(), islower);

cout<<i<<"символiв введено в нижньому регiстрi";

vector<string> str1;

merge(str.begin(),str.end(),a,a+3,back_inserter(str1));

cout<<endl;

vector<string>::iterator t=str1.begin();

while (t!=str1.end())

{

cout<<*t;cout<< " ";

t++;

}

cout<<"Натиснiть будь-яку клавiшу!";

while(!kbhit());

}

Рис. 1. Реалізація програми

13.5. Індивідуальні завдання

1. Створити контейнер, що містить об'єкти користувацького типу. Тип контейнера вибирається відповідно до варіанта завдання.

2. Відсортувати його по спаданню елементів.

3. Переглянути контейнер.

4. Використовуючи відповідний алгоритм, знайти в контейнері елемент, що задовольняє заданій умові.

5. Перемістити елементи, що задовольняють заданій умові в іншій (попередньо порожній) контейнер. Тип другого контейнера визначається варіантом завдання.

6. Переглянути другий контейнер.

7. Відсортувати перший і другий контейнери по зростанню елементів.

8. Переглянути їх.

9. Одержати третій контейнер шляхом злиття перших двох.

10. Переглянути третій контейнер.

11. Підрахувати, скільки елементів, що задовольняють заданій умові, містить третій контейнер.

12.Визначити, є чи в третьому контейнері елемент, що задовольняє заданій умові.

Зауваження:

1. Для створення другого контейнера в програмі № 3 можна використати або алгоритм remove_copy_if, або визначити свій алгоритм copy_if, якого немає в STL.

2. Для пошуку елемента в колекції можна використати алгоритм find_if, або for_each, або binary_search, якщо контейнер відсортований.

3. Умови пошуку й заміни елементів вибираються самостійно й для них пишеться функція-предикат.

4. Деякі алгоритми можуть не підтримувати використовувані у вашій програмі контейнери. Наприклад, алгоритм sort не підтримує контейнери, які не мають ітераторів довільного доступу. У цьому випадку варто написати свій алгоритм. Наприклад, для стека алгоритм сортування може виконуватися в такий спосіб: переписати стек у вектор, відсортувати вектор, переписати вектор у стек.

5. Для порівняння елементів при сортуванні по зростанню використовується операція <, що повинна бути перевантажена в користувацькому класі. Для сортування по убуванню варто написати функцію comp і використати другу версію алгоритму sort.

Варіанти завдань

№ п/п

Перший контейнер

Другий контейнер

Вбудований тип даних

1

vector

list

int

2

list

deque

long

3

deque

stack

float

4

stack

queue

double

5

queue

vector

char

6

vector

stack

string

7

map

list

long

8

multimap

deque

float

9

set

stack

int

10

multiset

queue

char

11

vector

map

double

12

list

set

int

13

deque

multiset

long

14

stack

vector

float

15

queue

map

int

16

priority_queue

stack

char

17

map

queue

char

18

multimap

list

int

19

set

map

char

20

multiset

vector

Int

21

multimap

map

long

22

queue

stack

float

23

priority_queue

set

char

13.6. Контрольні запитання

  1. На які категорії поділяються алгоритми STL?

  2. Яку бібліотеку слід підключити для роботи з алгоритмами STL?

  3. Яка різниця між алгоритмами групи модифіковані операції з послідовностями і немодифіковані операції з послідовностями?

  4. Які алгоритми сортування STL Ви знаєте? Наведіть приклад.

  5. Яка різниця між алгоритмом count_if і count?

  6. Для чого призначений алгоритм for_each?

  7. Яка різниця між алгоритмами iter_swap, swap і swap_ranges?

  8. Які алгоритми переміщення Ви знаєте? Наведіть приклад.

Література

1. Александреску А. Современное проектирование на С++. Серия С++ In-Depth. tType. 3 / А. Александреску – М.: Изд-ий дом "Вильямс", 2002. – 336 c.

2. Буч Г. Объектно-ориентированный анализ и проектирование с примерами на С++ / Г.Буч – М.: Бином, 1998. – 560 с.

3. Влиссидес Дж. Применение шаблонов проектирования. Дополнительные штрихи / Дж.Влиссидес – М.: Изд-ий дом "Вильямс", 2003. – 144 с.

4. Гамма Э. Приемы об­ъектно-ориенти­рован­ного программирования. Патерны проектирования / Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес – СПб.: Питер, 2004. – 366 с.

5. Кениг Э. Эффективное программирование на С++. Серия С++ In-Depth. tType. 2 / Э. Кениг, Б. Му – М.: Изд-ий дом "Вильямс", 2002. – 384 с.

6. Лафоре Р. Об­ъектно-ориентированное программирование в С++. Классика Computer Science. 4-е изд. / Р.Лафоре – СПб.: Питер, 2005. – 924с.

7. Алексєєв В.І. Об’єктно-орієнтоване програмування: Методичні вказівки до виконання лабораторних робіт з курсу «Об’єктно-орієнтоване програмування» / Укл.: В. І. Алєксєєв, І. О. Пеняк // Львів: Видавництво Національного університету «Львівська політехніка», 2011. — 44 с.

8. Павловская Т.А. Програмирование на языке высокого уровня / Т.А.Павловская – СПб.:Питер, 2003, – 461с.:ил.

9. Шилдт Г. Искусство программирования на С++// Г.Шилдт – СПб.: БХВ-Петербург, 2005. – 496с.:ил.

10. Страуструп Б. Дизайн и эволюция С++//Б.Страуструп. Пер. с англ. –М.:ДМК Пресс; СПб.: Питер, 2006. – 448 с.:ил.

11. Лаптев В.В. С++. Объектно-ориентированое программирование. Задачи и упражнения/ В.В.Лаптев., А.В.Морозов, А.В.Бокова – СПб.:Питер, 2007.– 288с.:ил.

12. Павловская Т.А., Щупак Ю.А. С++. Об­ъектно-ориентированное программирование: Практикум. – СПб.: Питер, 2005. – 265 с.

13. Страуструп Б. Язык программирования С++. – СПб.: Бином, 1999. – 991 с.

14. Халперн, Пабло. Стандартная библиотека С++ на примерах/ Пер. с англ. – М.: Изд. дом "Вильямс", 2001. – 336 с.

15. Шаллоуэй А., Тротт Д. Шаблоны проектирования. Новый подход к объектно-ориен­ти­ро­ван­ному анализу и проектированию. – М.: Изд-ий дом "Вильямс", 2002. – 288 с.

16. Шилдт, Герберт. Полный справочник по С++, 4-е изд./ Пер. с англ. – М.: Изд. дом "Вильямс", 2006. – 800 с.

1 7. Элджер Д. С++: библиотека программиста. – СПб.: Питер, 2000. – 320 с.

1 Застосування операторів "крапка" і "стрілка" для об'єктів відповідає їх застосуванню для структур і об'єднань.

2 "Правильне" закінчення означає виконання стандартної послідовності дій після завершення роботи.

3 Це випливає з умови задачі.

3

С.І. Коширець, М.Ф. Сало, Я.І. Соколовський