IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Использование шаблонов, c++
klem4
сообщение 21.02.2006 20:04
Сообщение #1


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Есть хедер type.h, вот его содержимое :

//Структуры для хранения данных и ключей в массиве
# ifndef _DATA    // защита от повторного  включения этого файла
# define _DATA    // в другой
# include <iostream.h>
# ifdef  _NUMBER //ключ - число (типа int, long, float и т.д.)
//шаблоны позволяют использовать один и тот же код
//для различных типов данных и ключей
template <class Key,class Data>
struct Record
	{Key key;
	 Data data;
	//перегрузка операций > и < для сравнения ключей структур
	 int   operator > ( Record & b) {return key > b.key;}
	 int  operator < ( Record & b) 	{return key < b.key;}
	 int  operator <= ( Record & b) 	{return key <= b.key;}
	 int  operator == ( Record & b) 	{return key == b.key;}
   // перегрузка операции = для ключа
	 void operator = (Key n){key=n};
   //печать ключа
	 void PrnKey (){ cout << key<<' ';}
	};
//обмен
template <class Key,class Data>
inline   void  swap(Record<Key,Data> & a,Record<Key,Data> & b )
	{Record<Key,Data> t;
	 t=a;a=b;b=t;
	}
//обмен, если 1-ый ключ > 2-го
template <class Key,class Data>
inline   void  IfMoreThenSwap(Record<Key,Data> & a,Record<Key,Data> & b )
	{if (a > b) { Record<Key,Data> t; t=a;a=b;b=t;}
	}
// сравнение ключей
template <class Key,class Data>
inline   int  compare (Record<Key,Data> & a,Record<Key,Data> & b )
	{return a>b?1:a==b?0:-1;
	}
# elif defined _STR_N //ключ - строка длиной LEN_STR
# include <string.h>
//в программе перед  # include <type.h> определять  const LEN_STR = число;
typedef char Key[LEN_STR+1];  //+1 для хранения признака конца строки - '\0'
template <class Data> struct Record
	{Key key;
	 Data data;
	//перегрузка операций > и < для сравнения ключей структур
	 int   operator > ( Record & b)
			{return _fstrcmp(key,b.key)>0;
			}
	 int  operator < ( Record & b)
			{return _fstrcmp(key,b.key)<0;
			}
	 int  operator <= ( Record & b)
			{return _fstrcmp(key,b.key)<=0;
			}
	 int  operator == ( Record & b)
			{return _fstrcmp(key,b.key) == 0;
			}
	 void operator = ( char *s); //запись ключа в структуру типа Record
	 void PrnKey() { char *w=key; cout << w <<' ';}
   }
template <class Data>
	 int  compare ( Record<Data> & a, Record<Data> &  b)
			{return _fstrcmp(a.key,b.key);}
template <class Data>
 void  Record<Data> :: operator = ( char *s)
  {
   int j=0;
   for(;j<LEN_STR && *s !='\0';j++) key[j] =*s++;
   key[j]='\0';
  }
# elif defined _CHAR_PTR    //ключ - строка  Си
# include <string.h>
 // т.к. С++ не допускает перегрузки операций для встроенных типов
 // создадим обертку для char * в виде структуры
typedef struct Key { char * key_ptr;};
template <class Data> struct Record
	{Key key;    //ключ
	 Data data;  //данные
	 //перегрузка операций > и < для сравнения ключей структур
	 int  operator > ( Record & b)
			{return _fstrcmp(key.key_ptr,b.key.key_ptr)>0;
			}
	 int  operator < ( Record & b)
			{return _fstrcmp(key.key_ptr,b.key.key_ptr)<0;
			}
      //запись ключа в структуру типа Record	 
 void operator = (char *s) { key.key_ptr =s;} 
	 void PrnKey() { cout << key.key_ptr <<' ';}
	}//struc Record
	template <class T>
	inline   int  compare (Record<T> &  a,Record<T> & b )
	{return  _fstrcmp(a.key.key_ptr,b.key.key_ptr;)
	}
# endif //типа ключа 
//функции обмена для строк
//если ключ - строка длиной LEN_STR или указатель на char
# if defined _STR_N || defined _CHAR_PTR
//обмен
template <class Data>
inline   void  swap(Record<Data> & a,Record<Data> & b )
	{Record<Data> t;
	 t=a;a=b;b=t;
	}
//обмен, если 1-ый ключ > 2-го
template <class Data>
inline   void  IfMoreThenSwap(Record<Data> & a,Record<Data> & b )
	{if (a > b) { Record<Data> t; t=a;a=b;b=t;}
	}
# endif // строк
# endif //защиты от повторного использовани 



Вот то что написано в методичке (как надо работать с этим хэдером)

Цитата
Первые два этапа выполняются на небольшом массиве, задаваемом программно в наиболее общем случае так :
Record <тип ключа, тип данных> ИмяМ%u


Сообщение отредактировано: volvo - 3.11.2006 12:08


Прикрепленные файлы
Прикрепленный файл  NEWLABA.rar ( 22.03 килобайт ) Кол-во скачиваний: 187


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
klem4
сообщение 21.02.2006 20:27
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


shok.gif как же тяжело когда не знаешь язык ... А type.h препод писал smile.gif У нас кстати в группе мало кто сомневался в том, что в нем нем ошибки, не смотря на что что никто не мог понять вообще что там написано smile.gif)


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
klem4   Использование шаблонов   21.02.2006 20:04
volvo   klem, у тебя в хидере ошибка :) вот так пиши в CP...   21.02.2006 20:15
klem4   :shok: как же тяжело когда не знаешь язык ... А t...   21.02.2006 20:27
klem4   Помогите пожалуйста написать шаблон для вывода мас...   23.02.2006 16:30
volvo   Формальный параметр? (Кстати, этот оператор надо...   23.02.2006 16:58
klem4   Спасибо, TC ++ пишет illegal structure operation ....   23.02.2006 17:05
klem4   В общем для массивов int и unsigned int все прошло...   5.03.2006 18:57
klem4   Тек-с ... вроде вопрос снят, методом научного тыка...   5.03.2006 19:08
volvo   Исправляй вот тут (TYPE.H): # elif defined _CHAR_P...   5.03.2006 19:08
klem4   Решил немного разобраться с этими шаблонами, как т...   12.03.2006 22:19
volvo   ТС спокойно отрабатывает (c int-ом, для char * нуж...   12.03.2006 22:36
klem4   Ээ, если я ничего не пропустил, покажи .. вроде ...   12.03.2006 22:45
volvo   вроде строки нормально сравнивает .. abc acb cab c...   12.03.2006 22:50
klem4   Ну да, я посмотрел что у гения препода в файле, та...   13.03.2006 9:52
volvo   Смотри: # include <iostream.h> # include ...   13.03.2006 10:08
klem4   Спасибо !   13.03.2006 10:12


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 28.07.2025 19:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"