←предыдущая следующая→
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
SArray<int,10> a; //заводим массив указателей на int
a[0]=5; a[1]=3; a[2]=7; //заносим значения
int k=a.Min(); } // получаем значение 3
//----------------------------------------------------------------------------
//3. статический массив
//2. хранение обьектов
//3. Сортировка (любым методом).
template <class T,int size> class SArray
{ private:
T data[size];
public:
SArray();
void Sort();
T& operator[](int i); };
template <class T,int size> SArray<T,size>::SArray()
{ for(int k=0;k<size;k++) data[k]=0; }
template <class T,int size> void SArray<T,size>::Sort()
{ for(int i=0;i<size-1;i++)
for(int j=i+1;j<size;j++)
if(data[j]<data[i]) //сравнение
{ T tmp=data[j]; data[j]=data[i]; data[i]=tmp; } } //обмен
template <class T,int size> T& SArray<T,size>::operator[](int i)
{ if(i<0||i>=size) return data[0]; //если выходит за границы то
//возвращаем первый элемент
return data[i]; }
void main()
{ SArray<int,10> a; //заводим массив указателей на int
a[1]=15; a[4]=9; a[3]=17; //заносим значения
a.Sort(); //сортируем
int i=a[0],j=a[1],k=a[2]; } //достаем отсортированнные по возрастанию
//----------------------------------------------------------------------------
//3. статический массив
//2. хранение обьектов
//4. Двоичный поиск на основе сравнения с внешним об"ектом-ключом
template <class T,int size> class SArray
{ private:
T data[size];
public:
SArray();
T& FindBin(T &key);
T& operator[](int i);};
template <class T,int size> SArray<T,size>::SArray()
{ for(int k=0;k<size;k++) data[k]=0; }
template <class T,int size> T& SArray<T,size>::FindBin(T& key)
{ int a=0,b=size-1,m; //начало,конец отрезка,середина
while(a<=b)
{ m=(a+b)/2; //середина
if(data[m]==key) return data[m]; //совпало с ключом
if(data[m]>key) a=m+1; //правая часть
else b=m-1; } //левая часть
return data[m]; } //не найден возвращаем ближайший
template <class T,int size> T& SArray<T,size>::operator[](int i)
{ if(i<0||i>=size) return data[0]; //если выходит за границы то
//возвращаем первый элемент
return data[i]; }
void main()
{ SArray<int,10> a; //заводим массив указателей на int
a[0]=5; a[1]=9; a[2]=17; //заносим значения
int i=a.FindBin(17); } //двоичный поиск
//----------------------------------------------------------------------------
//3. статический массив
//2. хранение обьектов
//5. Включение элемента по номеру.
template <class T,int size> class SArray
{ private:
T data[size];
public:
SArray();
T& operator[](int i);};
template <class T,int size> SArray<T,size>::SArray()
{ for(int k=0;k<size;k++) data[k]=0; }
template <class T,int size> T& SArray<T,size>::operator[](int i)
{ if(i<0||i>=size) return data[0]; //если выходит за границы то
//возвращаем первый элемент
return data[i]; }
void main()
{ SArray<int,10> a; //заводим массив указателей на int
a[4]=6; a[6]=7; a[1]=2; //заносим значения
int i=a[4]; i=a[6]; i=a[1]; } //получаем значения
//----------------------------------------------------------------------------
//3. статический массив
//2. хранение обьектов
//6. Исключение (удаление) элемента по номеру.
template <class T,int size> class SArray
{ private:
T data[size];
public:
SArray();
T& operator[](int i);
void Del(int i); };
template <class T,int size> SArray<T,size>::SArray()
{ for(int k=0;k<size;k++) data[k]=0; }
template <class T,int size> T& SArray<T,size>::operator[](int i)
{ if(i<0||i>=size) return data[0]; //если выходит за границы то
//возвращаем первый элемент
return data[i]; }
template <class T,int size> void SArray<T,size>::Del(int i)
{ if(i<0||i>=size) return;
data[i]=0; }
void main()
{ SArray<int,10> a; //заводим массив указателей на int
a[0]=500; a[1]=98; a[2]=17; //заносим значения
a.Del(0); a.Del(1); a.Del(2); } //"удаляем"
//----------------------------------------------------------------------------
//3. статический массив
//2. хранение обьектов
//7. Поиск и возвращение элемента по номеру.
template <class T,int size> class SArray
{ private:
T data[size];
public:
SArray();
T& operator[](int i); };
template <class T,int size> SArray<T,size>::SArray()
{ for(int k=0;k<size;k++) data[k]=0; }
template <class T,int size> T& SArray<T,size>::operator[](int i)
{ if(i<0||i>=size) return data[0]; //если выходит за границы то
//возвращаем первый элемент
return data[i]; }
void main()
{ SArray<int,10> a; //заводим массив указателей на int
a[4]=6; a[6]=7; a[1]=2; //заносим значения
int i=a[4]; i=a[6]; i=a[1]; } //получаем значения
//----------------------------------------------------------------------------
//4. динамический массив
//1. хранение указателей на обьекты
//1. Включение элемента с сохранением упорядочености.
template <class T> class DArray
{ private:
T **data;
int size;
public:
DArray(int _size);
~DArray();
void operator+(T *q);
T* operator[](int i);};
template <class T> DArray<T>::DArray(int _size)
{ size=_size;
data=(T**) new char[sizeof(T*)*size];
for(int i=0;i<size;i++) data[i]=NULL; }
template <class T> DArray<T>::~DArray()
{ delete data; }
template <class T> void DArray<T>::operator+(T *q)
{ for(int k=0;k<size&&data[k]!=NULL;k++);
if(k==size) return; //нет места в массиве
for(;k>0&&*data[k-1]>*q;k--) data[k]=data[k-1]; //раздвигаем элементы
data[k]=q; } //вставляем
←предыдущая следующая→
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
|
|