Итак, я решил оглянуться на некоторые структуры данных, чтобы держать себя в форме;)
Я начал реализовывать хеш-таблицу, когда вспомнил, что мне нужны связанные списки для блоков, чтобы я мог избежать коллизий хеш-функций. Итак, я начал свой связанный список ...
Я реализовал все функциональные методы моего класса связанного списка (добавить, получить, удалить и т. Д.), А затем решил, что хочу попробовать то, чего раньше не пробовал. Перегрузка операторов индексов массива, так что индексы моего связанного списка можно получить или назначить, как если бы связанный список был массивом.
У меня нет проблем с поисковой частью:
template <class T>
T LinkedList<T>::operator[](const int &i) {
return get(i);
}
Функция get возвращает данные связанного узла, а не сам узел ... установщик должен вести себя там, где предоставленное значение сохраняется в атрибуте данных узла с заданным индексом ... я вижу, что пользователь никогда не придется трогать класс ListNode.
Моя конечная цель состоит в том, чтобы у меня был умный LinkedList, который будет вести себя так:
LinkedList<int> list;
list[0] = 1; //Allocates memory for 0th node and stores 1 as the data
list[3] = 2; //Allocates memory for 1th,2th,and 3th nodes and sets 2 as the data
//Unassigned nodes should use default constructors on data
int a = list[3]; //Sets a to 2
cout << list[0] << endl; //prints 1
Геттер работает нормально, но у меня проблемы с сеттером. Предположим, что функция set со всей проверкой ошибок индекса и выделением памяти выполнена, как есть. Любая помощь будет оценена. Если это невозможно, пожалуйста, дайте мне знать, прежде чем я потрачу на это больше времени. Спасибо.