c++ - operaciones - listas ligadas
Lista enlazada C++: operadores de soporte de sobrecarga (2)
Parece que desea devolver nodos por referencia:
template <typename T>
class LinkedList {
...
T& operator[](const size_t& i) { return this->get(i); }
const T& operator[](const size_t& i) const { return this->get(i); }
...
};
(también asume que LinkedList::get()
devuelve referencias)
Entonces, decidí mirar hacia atrás en algunas estructuras de datos para mantenerme alerta;)
Empecé a implementar una tabla hash, cuando recordé que necesitaba listas vinculadas para los depósitos para poder evitar las colisiones hash. Entonces comencé mi lista de enlaces ...
Implementé todos los métodos funcionales de mi clase de lista enlazada (agregar, obtener, eliminar, etc.) y luego decidí que quería probar algo que no había probado antes. Sobrecargar los operadores de índice de matriz para que mis índices de lista enlazados puedan recuperarse o asignarse como si la lista vinculada fuera una matriz.
Obtuve la parte de recuperación sin problemas:
template <class T>
T LinkedList<T>::operator[](const int &i) {
return get(i);
}
La función get devuelve los datos del nodo asociado, no el nodo en sí ... el setter debería comportarse donde el valor suministrado se almacena en el atributo de datos del nodo en el índice dado ... mi visión es que el usuario nunca lo hará tiene que tocar la clase ListNode.
Mi objetivo final es que pueda tener una LinkedList inteligente que se comporte así:
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
El captador funciona bien, pero estoy teniendo problemas con el colocador. Supongamos que la función establecida con todas las comprobaciones de error de índice y la asignación de memoria se realiza, tal como está. Cualquier ayuda sería apreciada. Si es imposible, por favor avíseme antes de dedicarle más tiempo. Gracias.
operator[]
y get()
deberían devolver una referencia a los datos.
template <class T>
T& LinkedList<T>::operator[](const int &i) {
return get(i);
}