Я пытаюсь создать класс для реализации HashTable(C++) Конструктор для HashTable
Поскольку я делаю приковано HashTable, мой хэш-таблица начинается как массив указателей типа «объект».
У меня возникли проблемы с моим конструктором, так как в моем основном файле я собираюсь принять значение для размера массива. Как это:
int N;
scanf("%d", &N);
//Create HashTable Object
HashTable *hash = new HashTable(N);
Это мой .h файл:
class HashTable {
int arraySize;
typedef struct object {
string data;
object *nextptr;
} object;
object** table;
public:
//Constructor
HashTable(int size);
/// ...and other methods...
Для моей реализации конструктора я получаю сообщение об ошибке: Тема 1: EXC_BAD_ACCESS (код = 1, адрес = 0x0)
Значит, я знаю, что я делаю что-то неправильно.
Это моя реализация конструктора.
//Constructor
HashTable :: HashTable(int size){
this->arraySize = size;
this->table = new object[size]; //<-- this is giving me issues!!
for (int i = 0; i < arraySize; i++) {
table[i] = new object;
table[i]->data = "";
table[i]->nextptr = NULL;
}
}
Если кто-то может помочь мне здесь, что было бы очень полезно ... новинкой в этом.
EDIT: Задача требует использования массивов, а не векторов.
Мне кажется, мне нужно использовать массив указателей, так как каждый индекс в массиве будет содержать связанный список объектов, которые «столкнулись» с одним и тем же индексом.
Не используйте новый. Используйте хэш-таблицу HashTable (N); 'и векторы. Вполне допустимо, действительно, использовать новые структуры данных с точки зрения более простых, эффективных и отладочных, если это возможно. –
Вы слишком много используете уровень косвенности. Вы можете просто сделать свою таблицу «объектом *» (т. Е. Массивом объектов) и обойтись без выделения каждого объекта. Еще лучше, вы могли бы использовать 'std :: vector' объектов, чтобы избежать всех неприятных ловушек необработанных массивов. –
Да, я бы использовал векторы, если бы мог, но задания требовали использования массивов. Я отредактирую его и уточню. Итак, хэш HashTable (N); 'вместо hashTable * hash = new HashTable (N);' в моей главной? @NeilKirk – GusGus