Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Приклад. Методи шаблона вектора



Продовжимо розгляд шаблона класу вектора vector (див. попередній розділ) і визначимо методи, що фігурують в оголошенні цього класу. Конструктор класу-шаблона:

template <class T> vector <T>:: vector(int num){

a= new T[num];

vector:: num = num;

}

Функція введення значень елементів вектора:

template <class T> void vector <T>:: in() {

cout<<"Enter elements: ";

for (i=0; i<num; i++)

cin>>a[i];

}

Функція виведення елементів вектора на екран:

template <class T> void vector <T>:: show() {

for(i=0; i<num; i++)

cout<<a[i]<<" ";

cout<<endl;

}

Функція пошуку найменшого елемента; повертає значення цього елемента:

template <class T> T vector <T>:: find (int &min){

for (i=0; i<num; i++)

if (a[i]<a[min]) min=i;

return a[min];

}

Створення об'єкта-вектора (наприклад, цілочисельного масиву) і звертання до методів шаблона може виглядати так:

vector <int> arr (n);

arr.in();

arr.show();

int am = arr.find(min);

7.1.4. Приклад. Шаблон класу зв'язного списку

Параметрами шаблона можуть виступати не тільки стандартні типи даних, але й користувальницькі типи, наприклад, структура. Розглянемо приклад створення шаблона класу для списку (порівняйте з кодом у розд. "2.1.1. Списки"):

template <class T> class List {

T *pstart; //Покажчик початку списку

public:

List() { pstart=NULL; };

void add();

void display();

};

//Функція додавання вузла в список

template <class T> void List<T>:: add(){

T *temp; //Тимчасовий вузол

temp = new T;

cout << "Enter field1: ";

cin >>temp->field1; //Введення значення в поле 1

cout << "Enter field2: ";

cin >>temp->field2; //Введення значення в поле 2

temp->nxt = NULL; //Оскільки temp - останній вузол

//Зв'язування вузла із списком

if (pstart == NULL) pstart = temp;

else {

T *temp2; //Тимчасовий покажчик

temp2 = pstart; //Покажчик на початок списку

while (temp2->nxt!= NULL) //Поки не кінець списку

temp2 = temp2->nxt;//перемістити покажчик

temp2->nxt = temp; //Прив'язати до списку новий вузол

}

}

//Функція відображення списку на екрані

template <class T> void List<T>:: display(){

T *temp;

temp = pstart;

cout << endl;

if (temp == NULL) //Якщо список порожній

cout << "The list is empty!" << endl;

else {

while (temp!= NULL) {//Поки не кінець списку

cout << "field1: " << temp->field1<< " ";

cout << "field2: " << temp->field2<<endl;

temp = temp->nxt;

}

cout << "End of list!" << endl;

}

}

У цьому класі визначені функції додавання вузла в список (add) і відображення списку (display). Параметром шаблона T є тип даних вузла, наприклад, для списку "Блокнот" це може бути наступна структура:

struct node {

char field1[20];

long field2;

node *nxt;

};

Змінна field1 зберігає ім'я, а field2 – номер телефону. Тоді для створення об'єкта-списку потрібно записати:

List <node> mylist;

Якщо дані вузла містять не два (field1 і field2), а інше число полів, функції add і display потрібно видозмінити очевидним чином. Звернення до всіх полів структури як і раніше буде виконуватися через покажчик на вузол.

7.2. Постановка задачі

Створити шаблон функції або шаблон класу відповідно до варіанта завдання. Використати створений шаблон для роботи з об'єктами.

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

1. Створити функцію-шаблон для сортування масиву по зростанню методом обміну. Використати шаблон для сортування масиву випадкових чисел і символів у слові, введеному користувачем.

2. Створити функції-шаблони для сортування масиву по зростанню методом вибору і для перестановки елементів. Використати шаблони для сортування масиву випадкових чисел і символів у слові, введеному користувачем.

3. Створити функції-шаблони для сортування масиву по зростанню методом вставок, для перестановки елементів і для виведення даних. Використати шаблони для сортування масиву випадкових чисел і символів у слові, введеному користувачем.

4. Створити шаблон класу вектора. Скласти програму, що для цілих і дійсних чисел виконує ручне введення даних, виводить елементи вектора, обчислює суму елементів і норму вектора.

5. Створити шаблон класу вектора. Скласти програму, що для цілих чисел і символів виконує ручне введення даних, виводить елементи вектора в прямому й зворотному порядку.

6. Створити шаблон класу вектора. Скласти програму, що виконує введення елементів вектора – випадкових чисел і випадкових букв, виводить елементи вектора, сортує елементи по зростанню.

7. Створити шаблон класу вектора. Скласти програму, що виконує введення елементів вектора – випадкових чисел і випадкових букв, виводить елементи вектора, видаляє елементи в зазначених користувачем позиціях, копіює вектор.

8. Створити шаблон класу стека. Скласти програму, що із цілими й дійсними числами виконує наступні операції: поміщає елемент у стек, видаляє елемент із стека, зчитує елемент у вершині, визначає довжину стека.

9. Створити шаблон класу стека. Скласти програму, що із цілими числами й символами виконує наступні операції: поміщає елемент у стек, видаляє елемент із стека, перетворить послідовність елементів у зворотну за допомогою нового стека.

10. Створити шаблон класу стека. Скласти програму, що з цілими й дійсними числами виконує наступні операції: поміщає елемент у стек, видаляє елемент із стека, копіює від’ємні числа в новий стек.

11. Створити шаблон класу стека. Скласти програму, що з цілими й дійсними числами виконує наступні операції: поміщає елемент у стек, видаляє елемент із стека, копіює елементи в новий стек, перетворює їх до цілого типу.

12. Створити шаблон класу стека. Скласти програму, що з цілими й дійсними числами виконує наступні операції: поміщає елемент у стек, видаляє елемент із стека, виводить вміст стека на екран, обчислює суму елементів стека.

13. Створити шаблон класу стека. Скласти програму, що з цілими й дійсними числами виконує наступні операції: поміщає елемент у стек, видаляє елемент із стека, виконує чотири арифметичних операції, виводить результат операції на екран.

14. Створити шаблон класу черги. Скласти програму, що з цілими й дійсними числами виконує наступні операції: поміщає елемент у чергу, видаляє елемент із черги, зчитує перший елемент черги, обчислює довжину черги.

15. Створити шаблон класу черги. Скласти програму, що з цілими числами й символами виконує наступні операції: поміщає елемент у чергу, видаляє елемент із черги, виводить вміст черги на екран.

16. Створити шаблон класу черги. Скласти програму, що з цілими й дійсними числами виконує наступні операції: поміщає елемент у чергу, видаляє елемент із черги, копіює від’ємні числа в нову чергу.

17. Створити шаблон класу черги. Скласти програму, що з цілими й дійсними числами виконує наступні операції: поміщає елемент у чергу, видаляє елемент із черги, виводить вміст черги на екран, обчислює суму елементів черги.

18. Створити шаблон класу черги. Скласти програму, що з цілими й дійсними числами виконує наступні операції: поміщає елемент у чергу, видаляє елемент із черги, копіює елементи в нову чергу, перетворює їх до цілого типу.

19. Створити шаблон класу списку. Використати його при розв'язанні варіанта 1 лабораторної роботи 2 "Динамічні структури даних".

20. Створити шаблон класу списку. Використати його при розв'язанні варіанта 3 лабораторні роботи 2 "Динамічні структури даних".

21. Створити шаблон класу списку. Використати його при розв'язанні варіанта 5 лабораторної роботи 2 "Динамічні структури даних".

22. Створити шаблон класу списку. Використати його при розв'язанні варіанта 7 лабораторної роботи 2 "Динамічні структури даних".

23. Створити шаблон класу списку. Використати його для формування списку "Блокнот" (прізвище, ім'я, телефон, день народження) і списку "Студент" (прізвище, ім'я, група, середній бал). Реалізувати операції додавання елемента в початок списку, видалення елемента, виведення списку на екран.

24. Створити шаблон класу списку. Використати його для формування списку "Предметний покажчик" (назва теми, номер сторінки) і списку "Поїзд" (пункт призначення, номер поїзда). Реалізувати додавання елемента в початок списку, пошук за значенням першого поля й виведення значень другого поля.

7.4. Методичні вказівки

Інтерфейс програми має бути побудований у вигляді меню, що дозволяє вибрати потрібну операцію над даними.

7.5. Зміст звіту

1. Постановка завдання.

2. Код програми.

3. Скриншот з результатами роботи програми.

4. Пояснення принципів використання шаблонів функцій і класів.


8. Лабораторна робота 8.
"Файловий введення-виведення"

Ціль роботи: Вивчення системи введення-виведення С++: класів-шаблонів потоку, прапорців формату, маніпуляторів введення-виведення. Освоєння посимвольних і блокових операцій з файлами, а також прийомів послідовного й довільного доступу.

8.1. Теоретичні відомості

8.1.1. Система введення-виведення С++

У мові програмування С++ операції введення/виведення виконуються за допомогою класів istream (потокове введення) і ostream (потокове виведення). Третій клас, iostream, є похідним від них. Для використання бібліотеки iostream необхідно підключити заголовний файл <iostream>.

Система введення-виведення С++ дозволяє форматувати дані аналогічно тому, як це робить у С функція printf. Форматуванням управляють прапорці формату, які являють собою бітові маски. Прапорці формату підтримуються в базовому класі ios бібліотеки iostream. Кожний прапорець встановлюється функцією setf(), а скидається функцією unsetf() класу ios.

Прапорці left, right дозволяють вирівнювати виведену інформацію по лівій і правій границях поля за допомогою символів, що друкуються відповідно в правій і лівій порожніх позиціях. Використовуваний символ заповнення задається за допомогою функції fill() класу ios або маніпулятора потоку setfill()(всі маніпулятори підключаються заголовним файлом <iomanip>). Прапорець showpos приводить до обов'язкового друку знака +. Прапорець fixed установлюється для виведення чисел із плаваючою крапкою у звичайній нотації. Прапорець scientific установлюється для виведення чисел із плаваючою крапкою в експонентній формі. Для установки ширини поля виведення може бути використана функція width() класу ios або маніпулятор потоку setw(). Кількість значущих цифр задається функцією precision() або маніпулятором setprecision().

Розглянемо застосування прапорців і маніпуляторів у програмі:

#include <iostream.h>

#include <iomanip.h>

int main(){

double x=12.345;

cout.setf(ios::right);

cout<<setw(10)<<x<<endl;

cout.setf(ios::left);

cout.fill('#');

cout<<setw(10)<<x<<endl;

cout.unsetf(ios::left);

cout.unsetf(ios::right);

cout.fill('*');

cout<<setw(10)<<setprecision(4)<<x<<endl;

cout.setf(ios::left | ios::showpos);

cout<<setw(10)<<setfill('$')<<x<<endl;

return 0; }

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

12.345

12.345####

*****12.35

+12.35$$$$

Установка ширини поля застосовується тільки до наступної операції "помістити" або "взяти" з потоку; потім ширина поля встановлюється такою, яка необхідна для подання вихідних значень.





Дата публикования: 2015-04-07; Прочитано: 388 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.012 с)...