Об’єктно-орієнтоване програмування» на тему «Стандартна бібліотека шаблонів STL

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
ЗІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Розрахункова робота
Предмет:
ООП

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки, молоді та спорту України Національний університет «Львівська політехніка» Кафедра АСУ / Звіт до розрахункової роботи з предмету «Об’єктно-орієнтоване програмування» на тему «Стандартна бібліотека шаблонів STL» Мета роботи: Ознайомитись зі структурою та функціональним призначенням класів C++ зі стандартної бібліотеки шаблонів STL (Standard Template Library), дослідити переваги їх використання у прикладних програмах. Послідовність роботи: 1. Ознайомитись з теоретичним матеріалом про стандартну бібліотеку шаблонів STL. 2. Для заданого варіанту завдання написати програму з використанням контейнерів, алгоритмів та ітераторів STL. 3. Визначити часові характеристики роботи програми (сумарний час на виконання кожного різновиду операції на прикладі з великою кількістю згенерованих випадковим чином об’єктів або операцій над ними (наприклад, 1000)). 4. Доповнити програму з ЛР № 5 аналогічними можливостями визначення часових характеристик роботи і обчислити їх значення на такому ж прикладі. 5. Зробити висновок про ефективність застосування контейнерів, алгоритмів та ітераторів STL. Індивідуальне завдання: 27. На основі контейнера vector побудувати одновимірний динамічний масив цілих чисел. Виконати операції введення елементів у масив, конкатенація двох масивів, злиття двох впорядкованих масивів зі збереженням впорядкованості, виведення масиву на екран. Тексти програм: Без використання контейнера: #include <iostream> #include <windows.h> #include <string.h> #include <time.h> using namespace std; template <class T> class mas { public: T *m; int size; mas(int newsize); ~mas(); void konkat(mas& A); void zlytya(mas& A); void sort(); friend ostream& operator>> <>(ostream&, mas&); friend istream& operator<< <>(istream&, mas&); }; template <class T> mas<T>::mas(int newsize) { m = new T[size = newsize]; for(int i=0; i<size; i++) m[i]=rand()/100.0; } template <class T> mas<T>::~mas() { delete [] m; } template <class T> void mas<T>::konkat(mas& A) { int hsize=size+A.size; T *k = new T[hsize]; int i=0; for(; i<size; i++) k[i] = m[i]; for(int j=0; j<A.size; i++, j++) k[i] = A.m[j]; delete [] m; size=hsize; m = k; } template <class T> void mas<T>::zlytya(mas& A) { sort(); A.sort(); int hsize=size+A.size; T *k = new T[hsize]; int i=0, v1=0, v2=0; while(i<hsize) { if(v1==size || v2==A.size) break; if(m[v1]<A.m[v2]) { k[i]=m[v1]; i++; v1++; } else { k[i]=A.m[v2]; i++; v2++; } } if(v1!=size) while(i<hsize) { k[i]=m[v1]; i++; v1++; } else if(v2!=A.size) while(i<hsize) { k[i]=A.m[v2]; i++; v2++; } delete [] m; m=k; size=hsize; } template <class T> void mas<T>::sort() { for(int i=0; i<size-1; i++) for(int j=i+1; j<size; j++) if(m[i]>m[j]) { T buf=m[i]; m[i]=m[j]; m[j]=buf; } } template <class T> istream& operator>>(istream& is, mas<T>& x) { cout<<"Введіть "<<x.size<<" елементів:\n"; for(int i=0; i<x.size; i++) is>>x.m[i]; return is; } template <class T> ostream& operator<<(ostream& os, mas<T>& x) { os<<"Вивід: "; for(int i=0; i<x.size; i++) os<<x.m[i]<<' '; os<<endl; return os; } void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); clock_t time; time = clock(); double vv; int N=10000; mas<int> V(N), F(N); V.konkat(F); V.zlytya(F); cout<<V; time = clock() - time; vv=(double)time/CLOCKS_PER_SEC; cout<<"Час: "<<vv<<"c."<<endl; getchar(); getchar(); } З використанням контейнера vector: #include <windows.h> #include <algorithm> #include <iostream> #include <vector> #include <time.h> using namespace std; void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); clock_t time; time = clock(); double vv; vector <int> v, w; vector <int>::iterator p, q; int x; int N=10000; for(int i=0; i<N; i++) { x=rand()/100.0; v.push_back(x); } for(int i=0; i<N; i++) { x=rand()/100.0; w.push_back(x); } for(p=w.begin() ; p!= w.end(); p++) v.push_back(*p); sort(v.begin(),v.end()); sort(w.begin(),w.end()); vector <int> res(N*3); merge(v.begin(),v.end(),w.begin(),w.end(),res.begin()); cout<<"Вивід: "; for(p=res.begin() ; p!= res.end(); p++) cout<<" "<<*p; cout<<endl; time = clock() - time; vv=(double)time/CLOCKS_PER_SEC; cout<<"Час: "<<vv<<"c."<<endl; getchar(); getchar(); } Контрольні приклади виконання: N=1000 Без використання контейнера: З виведенням / Без виведення / З використанням контейнера vector: З виведенням / Без виведення / N=10 000 Без використання контейнера: Без виведення / З використанням контейнера vector: Без виведення / N=100 000 Без використання контейнера: Без виведення Дуже велике число = 100 секунд . З використанням контейнера vector: Без виведення / Отже, виконуючи дану розрахункову роботу я ознайомивсь зі структурою та функціональним призначенням класів C++ зі стандартної бібліотеки шаблонів STL (Standard Template Library), дослідив переваги їх використання у прикладних програмах. Для порівняння швидкості двох програм, без використання контейнерів і з використанням контейнеру vector, рандомно генерувались 1000, 10 000 та 100 000 чисел. Далі над ними виконувались такі дії як конкатенація та злиття. В результаті досліджень при кількості чисел N=1000 програма створена без контейнерів видала швидкий результат 0.048 с., недалекий від програми з використанням контейнера 0.032с. Коли ж кількість елементів збільшили в десятеро, швидкість програми буз використання контейнерів впала в 7 разів (N=10 000) відносно другого варіанту програми (2.043с. і 0.265с. відповідно). При збільшені кількості чисел ще 10 разів (N=100 000) швидкість першої програми знизилась в 80 разів в порівнянні з програмою яка використовує контейнер (100с. і 1.872с. відповідно). Причина меншої швидкості програми без використання контейнера є менш досконалий алгоритм сортування елементів.
Антиботан аватар за замовчуванням

26.01.2014 22:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!