|
Программирование >> Программирование на языке c++
for (j=0;j<5;j++) cout << my array1[j]; cout endl; Результаты работы этой программы могут быть представлены, например, в следующем виде: 1234523456<Enter> 6544523321 ddbbccbbaa Здесь строка, помеченная <Enter>, вводится пользователем. В качестве альтернативы можно рассмотреть другой подход, когда ссылка на класс comp передается в функцию swap в виде второго (дополнительного) аргумента. Рассмотрим пример: template<class Туре> void swap(comparable array<Type>& my array, comp<Type>& cm) { int size=my array.size; for{int i=0,j=size-1;i<j;i++,j-) if (cm.less than(my array[i],my array[j])) ** { Type temp = my array[j]; my array[j] = my array[i]; my array[i] = temp; Теперь можно переписать нашу функцию main, например, следующим образом: void main(void) { comparable array<int> my array(10); comparable array<char*> my array1(5); comp<int> cmi; comp<char*> cms; my array1[0] = aa ; my array1[1] = bb ; my array1[2] = сс ; my array1[3] = bb ; my array1[4] = dd ; for (int j=0;j<10;j++) cin my array[j]; swap(my array,cmi); swap(my array1,cms); for(j=0;j<10;j++) cout my array[j]; cout endl; for (j=0;j<5;j++) cout << my array1j]; cout endl; Здесь мы явно описали, какие типы массивов будут использоваться: comparable array<int> my array(10); comparable array<char*> my array 1 (5); и элементы каких типов будут сравниваться: comp<int> cmi; comp<char*> cms; Результаты работы этой программы будут такими же, как и предыдущей программы. Единственным отличием является то, что ввод каждого отдельного целого числа завершается нажатием клавиши Enter (ввод). Например, чтобы ввести 10 целых чисел 1,2,3,4,5,2,3,4,5,6 из предыдущего примера, надо нажать клавишу Enter 10 раз. Рассмотрим выражение программы: cm.less than(my array[i],my array[j]) Здесь объект сш класса comp не используется. Этот объект нужен нам только для того, чтобы вызвать функцию less than. Однако эту функцию можно вызвать и так: comp<Type>::less than(my array[i],my array[j]) В результате для решения рассматриваемой задачи можно использовать первую версию нашей программы: #include <iostream.h> #include <string.h> #include array.h template<class Type> class comp { public: static less than(Type& x,Type& y) { return x<y; } class comp<char*> { public: static less than(const char* x,const char* y) { return strcmp(x,y)<0; } template<class Type> void swap(array<Type>& my array) { int size=my array.size; for(int i=0,j=size-1;i<j;i++,j-) if (comp<Type>::less than(my array[i], my array[j])) ***** { Type temp = my array[j]; my array[j] = my array[i]; my array[i] = temp; void main{void) { array<int> my array{10); array<char*> my array1(5); my array1[0] = aa ; my array1[1] = bb ; my array1[2] = cc ; my array1[3] = bb ; my array1[4] = dd ; for (int j=0;j<10;j++) cin my array[j]; swap(my array); swap(my array 1); for (i=0;j<10;j++)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |