Создать шаблонный класс, реализующий массив переменной длины. Шаблон должен параметризоваться типом элемента массива и характеристиками этого типа (способом сравнения экземпляров).
Помимо обычных операций, определенных для массивов, реализуемый класс должен поддерживать сортировку элементов и бинарный поиск. Сравнение элементов должно происходить на основе класса характеристик, использованного при параметризации шаблона.
Определить базовые реализации классов характеристик для некоторых встроенных типов: int, char, char* (интерпретируемый как строка символов, закачивающаяся 0)
Замечание | |
---|---|
Похожим образом такие задачи решаются в STL - можете подсмотреть. |
Для защиты лабораторной работы необходимо представить:
Разработанный класс 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; }