c++链表重载括号操作符[]



所以,我决定回顾一下一些数据结构,以保持自己的敏锐;)

我开始实现一个哈希表,当我想起我需要链表的桶,这样我可以避免哈希冲突。所以我开始我的链表…

我实现了我的链表类的所有功能方法(添加,获取,删除等),然后我决定我想尝试一些我以前没有尝试过的东西。重载数组索引操作符,以便我的链表索引可以被检索或分配,就好像链表是一个数组。

我得到了检索部分工作没有问题:

template <class T>
T LinkedList<T>::operator[](const int &i) {
    return get(i);
}

get函数返回关联节点的数据,而不是节点本身…setter应该在提供的值存储到给定索引处节点的data属性的地方执行…我的设想是用户永远不需要碰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

getter工作得很好,但我在setter上遇到了麻烦。假设已经完成了包含所有索引错误检查和内存分配的set函数。任何帮助都会很感激。如果不可能,请在我花费更多时间之前让我知道。谢谢。

看起来您想通过引用返回节点:

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); }
...
};

(也假设LinkedList::get()返回引用)

operator[]get()应该返回对数据的引用。

template <class T>
T& LinkedList<T>::operator[](const int &i) {
    return get(i);
}

最新更新