Я тренируюсь, чтобы кодировать более сложный проект, который требует реализации бинарного дерева поиска. Моя работа заставила меня сосредоточиться на пользовательских типах и шаблонах. Теперь моя идея заключалась в том, чтобы создать собственный массив типов, который был бы настроен на прием элементов любого типа. Я даже включил итератор, просто чтобы проверить, как он работает. Затем я создал собственный класс MyPairs (поскольку BST принимает пары {ключ, значение}). Дело в том, что когда я пытаюсь реализовать массив такого типа, я получаю сообщения об ошибках типа std :: bad_array_new_lenght или std :: bad_allo c. Я уверен, что все это вызвано инициализацией массива dinami c, но я не могу понять, в чем проблема. Иногда код не работает даже для типа int. Что я делаю не так? Я сообщаю код, который я сделал. Вы можете найти больше комментариев о том, что я пытался сделать.
template<typename T>
class array{ //third custom type, a regular array that is created in the heap
T* start;
std::size_t size;
const int dimension = 10;//i decided, to simplify things to fix the array dimension
public:
array()
:start{new T[dimension]}, size{0} {}////////////////HERE SEEMS TO BE THE PROBLEM
~array()
{
std::cout<<"Destructor Called"<<std::endl;
delete[] start;
}
MyIterator<T> insert(T item){
if (size == dimension-1)
throw TooFullException{"Array is too small"};
start[size] = item;
MyIterator<T> x{start+size};
++size;
std::cout<<"size:"<<size<<std::endl;
return x;
}
MyIterator<T> begin(){
MyIterator<T> x{start};
return x;
}
MyIterator<T> end(){
MyIterator<T> x{start+size};
return x;
}
friend
std::ostream& operator<<(std::ostream& os, array& x)//printing the array
{
for(MyIterator<T> i = x.begin(); i != x.end(); ++i)
os<<*i<<" ";
os<<std::endl;
return os;
}
РЕДАКТИРОВАТЬ: Я ограничил код, чтобы теперь вы могли видеть, где ошибка