Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2009, 19:17   #1
napanin
Пользователь
 
Регистрация: 07.06.2009
Сообщений: 12
Печаль С++ шаблоны функции

задание:
написать шаблон функции поиска минимального элемента в массиве. критерий сравнения элементов передавать через параметр шаблона.

пример: найти минимальный по модулю, минимальный по значению остатка от деления на 10.

неудачная попытка реализования:

template<class T> void print_mas(T* a, int n) {
for (int i=0; i<n; ++i)
cout<<a[i]<<' ';
}

template<class T, class C> void bubble_sort(T* a, int n) {
for (int n_swap=1; n_swap>0 ; ) {
n_swap=0;
for (int i=1; i<n; ++i)
if (C::lt(a[i],a[i-1])) {
mswap(a[i],a[i-1]);
++n_swap;
}
}
}
template<class T> void mswap(T &x, T& y){ T t=x; x=y; y=t; }

template<class T> class Cmp {
public:
static bool lt(T a, T b){return a<b;}
};
class Cmp_abs {
public:
static bool lt(double a, double b){return fabs(a)<fabs(b);}
};

void main() {
int iii[]={10,9,8,-3,11,7,1,2,3,4,5,6};
double fff[]={0.1,0.09,-0.099,0.11,0.7};

bubble_sort<int, Cmp_abs >(iii, sizeof(iii)/sizeof(int));
print_mas(iii, sizeof(iii)/sizeof(int)); cout<<endl;

bubble_sort<double,Cmp<double> >(fff, sizeof(fff)/sizeof(double));
print_mas(fff, sizeof(fff)/sizeof(double)); cout<<endl;
}
napanin вне форума Ответить с цитированием
Старый 11.06.2009, 19:24   #2
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
написать шаблон функции поиска минимального элемента в массиве. критерий сравнения элементов передавать через параметр шаблона.

пример: найти минимальный по модулю, минимальный по значению остатка от деления на 10.
Код:
#include <iostream>
#include <cmath>
using namespace std;

template<typename _InIt, typename _Pr>
_InIt min_if(_InIt begin, _InIt end, _Pr pr){
	_InIt result = begin;
	for(; begin != end; ++begin){
		if(pr(*begin) <  pr(*result))
			result = begin;
	}
	return result;
}

template<typename T>
T pred_fun_abs(T i){
	return abs(i);
}

template<typename T>
T pred_fun_mod_10(T i){
	return i%10;
}
int main() 
{
	int arr[] = {-2,1,3,2,-5};

	cout << *min_if(arr, arr + 5,pred_fun_abs<int>) << endl;
	cout << *min_if(arr, arr + 5,pred_fun_mod_10<int>) << endl;

	return 0;
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 11.06.2009, 19:26   #3
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

или так с класами
Код:
#include <iostream>
#include <cmath>
using namespace std;

template<typename _InIt, typename _Pr>
_InIt min_if(_InIt begin, _InIt end, _Pr pr){
	_InIt result = begin;
	for(; begin != end; ++begin){
		if(pr(*begin) <  pr(*result))
			result = begin;
	}
	return result;
}

template<typename T>
class cl_abs
{
public:
	T operator ()(T i){
		return abs(i);
	}
};

template<typename T>
class cl_mod_10
{
public:
	T operator ()(T i){
		return i%10;
	}
};

int main() 
{
	int arr[] = {-2,1,3,2,-5};

	cout << *min_if(arr, arr + 5,cl_abs<int>()) << endl;
	cout << *min_if(arr, arr + 5,cl_mod_10<int>()) << endl;

	return 0;
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблоны функций. (*_*) Общие вопросы C/C++ 2 05.06.2009 20:21
Шаблоны форм Lemo Общие вопросы Delphi 16 09.02.2009 18:49
Шаблоны bondik Общие вопросы C/C++ 10 04.05.2008 09:50
Word и шаблоны. Gambler Microsoft Office Word 0 29.10.2006 20:44