Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Class vector




{ T *ms;

int size;

public:

vector(): size(0),ms(NULL) {}

~vector(){delete [] ms;}

void inkrem(const T &t) // увеличение размера массива на 1 элемент

{ T *tmp = ms;

ms=new T[size+1]; // ms − указатель на новый массив

if(tmp) memcpy(ms,tmp,sizeof(T)*size); // перезапись tmp -> ms

ms[size++]=t; // добавление нового элемента

if(tmp) delete [] tmp; // удаление временного массива

}

void decrem(void) // уменьшение размера массива на 1 элемент

{ T *tmp = ms;

if(size>1) ms=new T[--size];

if(tmp)

{ memcpy(ms,tmp,sizeof(T)*size); // перезапись без последнего

// элемента

delete [] tmp; // удаление временного массива

}

}

T &operator[](int ind) // определение обычного метода

{ // if(ind<0 || (ind>=size)) throw IndexOutOfRange; // возбуждение

// исключительной ситуации IndexOutOfRange

return ms[ind];

}

};

int main()

{ vector <int> VectInt;

vector <double> VectDouble;

VectInt. inkrem(3);

VectInt. inkrem(26);

VectInt. inkrem(12); // получен int-вектор из 3 атрибутов

VectDouble. inkrem(1.2);

VectDouble. inkrem(.26);//получен double-вектор из 2 атрибутов

int a=VectInt[1]; // a = ms[1]

cout << a << endl;

int b=VectInt[4]; // будет возбуждена исключительная ситуация

cout << b << endl; // но не обработана

double d=VectDouble[0];

cout << d << endl;

VectInt[0]=1;

VectDouble[1]=2.41;

return 0;

}

Класс vector наряду с конструктором и деструктором имеет 2 функции: increm – добавление в конец вектора нового элемента, dekrem – уменьшение числа элементов на единицу и операция [] обращения к i-му элементу вектора.

Параметр шаблона vector – любой тип, у которого определены операция присваивания и операция new. Например, при задании объекта типа vector <int> происходит генерация конкретного класса из шаблона и конструирование соответствующего объекта VectInt, при этом тип Т получает значение типа int. Генерация конкретного класса означает, что генерируются все его компоненты-функции, что может привести к существенному увеличению кода программы.

Выполнение функций

VectInt.increm(3);

VectInt.increm(26);

VectInt.increm(12);

приведет к созданию вектора (массива) из трех атрибутов (3, 26 и 12).

Сгенерировать конкретный класс из шаблона можно, явно записав:

template vector<int>;

При этом не будет создано никаких объектов типа vector<int>, но будет сгенерирован класс со всеми его компонентами.

В некоторых случаях желательно описания некоторых компонент-функций шаблона класса выполнить вне тела шаблона, например:

#include <iostream >

using namespace std;

template <class T1,class T2>

T1 sm1(T1 aa,T2 bb) // описание шаблона глобальной

{ return (T1)(aa+bb); // функции суммирования значений

} // двух аргументов

template <class T1,class T2>





Поделиться с друзьями:


Дата добавления: 2015-09-20; Мы поможем в написании ваших работ!; просмотров: 992 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Настоящая ответственность бывает только личной. © Фазиль Искандер
==> читать все изречения...

2374 - | 2099 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.