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