В общем сделал я каждый элемента массива аналогично тому как было в файлах препода, чтобы не приставал, и получилось у меня следующее. Хотел бы услашать какие- либо замечания/поправки, так как с классами/шаблонами познакомился совсем недавно и опыта немного.
И так шаблон класса для работы с одномерным массивом
Имеются функции - Ввод с клавиатуры - Заполнение случайными сислами - Передача массива - константы - Сортировка (методом вставок) - Линейный поиск
И класс Timer для замера времени. Конечно чтобы такими методами замерить время приходится выполнять процедуру много раз.
#include <iostream.h> #include <string.h>
/********************** Class Timer **************************/ class Timer { public : void On(); void Off(); void Show(); private: int start, end; };
/********************* Class Vector ************************/
template <class T> class Vector{ public : void GetMem(long); // выделение памяти void Input(); // обчный ввод с клавы void Input(long); // заполнение случайными числами (от 0 до значения входногопараметра) void Print(); // печать ключей массива long LSearch(T value); // линейный поиск, возвращает номер элемента или -1 если не найден void ISort(); // сортировка вставками private : Element <T> * V; long size; };
template <class T> void Vector <T> :: GetMem(long n){ size = n; V = new Element <T> [size]; };
void Vector <char*> :: GetMem(long n){ size = n; V = new Element<char*> [size]; for (long i = 0; i < size; i++) V[i].Key = new char [size]; };
template <class T> void Vector <T> :: Input(){ for (long i = 0; i < size; i++){ cout << "V[" << i << "]="; cin >> V[i].Key; }; };
template <class T> void Vector<T> :: Input(long rnd){ srand(time(NULL)); for (long i = 0; i < size; V[i++].Key = rand() % rnd); };
template <class T> void Vector <T> :: Print(){ long i = 0; while (i < size) cout << V[i++].Key << endl; };
template <class T> long Vector <T> :: LSearch(T value){ long i = 0; while ((i < size) && !(V[i++].Key == value)); return i < size ? --i : -1; };
template <class T> void Vector <T> :: ISort() { long a,b; for (a = 1; a < size; a++) { Element<T> temp = V[a]; for (b = a - 1; (b >= 0) && (temp.Key < V[b].Key); b--) V[b+1] = V[b]; V[b+1] = temp; }; };
Timer TIMER;
int main(void){
Vector <int> a;
long N = 100; a.GetMem(N); a.Input(100); // в данном случае заполнение массива сл. числами
TIMER.On(); long find = 0; for (long i = 0; i < 10000; i++) find = a.LSearch(3); // поиск и замер времени TIMER.Off();
cout << "find = " << find << endl;
cout << "\nBefore Sort : " << endl; a.Print();
a.ISort(); // сортировка
cout << "\nAfter sort : " << endl; a.Print();
cout << "Search time : "; TIMER.Show();
return 0; }
Извините ввод с помощью константы я забыл сделать ) Добавлю.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.