Вариант 4. Шаблонный массив переменной длины + сортировка и поиск

Стоимость

25 баллов

Описание

Создать шаблонный класс, реализующий массив переменной длины. Шаблон должен параметризоваться типом элемента массива и характеристиками этого типа (способом сравнения экземпляров).

Помимо обычных операций, определенных для массивов, реализуемый класс должен поддерживать сортировку элементов и бинарный поиск. Сравнение элементов должно происходить на основе класса характеристик, использованного при параметризации шаблона.

Определить базовые реализации классов характеристик для некоторых встроенных типов: int, char, char* (интерпретируемый как строка символов, закачивающаяся 0)

[Замечание]Замечание

Похожим образом такие задачи решаются в STL - можете подсмотреть.

Защита

Для защиты лабораторной работы необходимо представить:

  • Работающую программу.
  • Диаграмму классов.
  • Набор юнит-тестов, выполненных с помощью CppUnitLite.

Пример

Разработанный класс VarArray должен допускать примерно такое использование:

/*...*/

template <>
class traits<MyClass *> {
	int compare(MyClass *a, MyClass* b) {
	        if (a == 0) return -1;
	        if (b == 0) return +1;
		return a->val - b->val;
	}
};

typedef VarArray<int> Array1;
typedef VarArray<MyClass *, traits<MyClass*> > Array2;

int main() {
	Array1 a1;
	Array2 a2;

	a1.add(4);
	a1.add(3);
	a1.sort();   

	a2.add(new MyClass(8));
	a2.add(new MyClass(7));
	a2.sort();   // используется операция compare, описанная
	             // выше

	for (int i = 0; i < a1.length(); i++) {
	        if (a1[i]) cout << i << ": " << *(a1[i]) << endl;
	}

	return 0;
}
Сайт управляется системой uCoz