C++ C++;链表:重载括号运算符[]
因此,我决定回顾一些数据结构,以保持敏锐的洞察力;) 我开始实现一个哈希表,当时我记得我需要为存储桶创建链表,这样我就可以避免哈希冲突。所以我开始了我的链接列表 我实现了我的链表类的所有函数方法(add、get、remove等),然后我决定尝试一些以前从未尝试过的方法。重载数组索引运算符,以便可以检索或分配我的链表索引,就像链表是数组一样 我让检索部分正常工作没有问题:C++ C++;链表:重载括号运算符[],c++,data-structures,operator-overloading,linked-list,square-bracket,C++,Data Structures,Operator Overloading,Linked List,Square Bracket,因此,我决定回顾一些数据结构,以保持敏锐的洞察力;) 我开始实现一个哈希表,当时我记得我需要为存储桶创建链表,这样我就可以避免哈希冲突。所以我开始了我的链接列表 我实现了我的链表类的所有函数方法(add、get、remove等),然后我决定尝试一些以前从未尝试过的方法。重载数组索引运算符,以便可以检索或分配我的链表索引,就像链表是数组一样 我让检索部分正常工作没有问题: template <class T> T LinkedList<T>::operator[](cons
template <class T>
T LinkedList<T>::operator[](const int &i) {
return get(i);
}
模板
T LinkedList::运算符[](常量int&i){
返回获取(i);
}
get函数返回关联节点的数据,而不是节点本身…setter应该在提供的值存储到给定索引处的节点的数据属性的地方工作…我的设想是用户永远不必接触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
LinkedList列表;
列表[0]=1//为第0个节点分配内存,并将1存储为数据
列表[3]=2//为第1、第2和第3个节点分配内存,并将2设置为数据
//未分配的节点应在数据上使用默认构造函数
int a=列表[3]//将a设置为2
cout看起来您希望通过引用返回节点:
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); }
...
};
模板
类链接列表{
...
T&运算符[](const size_T&i){返回此->获取(i);}
常量T和运算符[](常量大小_T&i)常量{返回此->获取(i);}
...
};
(还假设LinkedList::get()
返回引用)运算符[]
和get()
应返回对数据的引用
template <class T>
T& LinkedList<T>::operator[](const int &i) {
return get(i);
}
模板
T&LinkedList::运算符[](常量int&i){
返回获取(i);
}
由于getter函数必须作为迭代实现,因此添加setter似乎很简单。然而,我认为这个界面使用起来会很笨拙。在上面的示例中,冲突列表的预期大小是多少?我(作为用户)如何知道两个项目[1,2]是“空的”?您打算如何在删除时保持关联性,正弦恒定时间删除是链表的主要优点之一?const size\u t&i
没有多大意义,因为它不是必需的<代码>大小\u ti
就足够了。@Nawaz const ref也足够了。这对我来说很有意义,这是我的默认值,而不是价值。@Justin:我认为这太过分了。或者你认为它让调用更快?“纳瓦兹,我这样做是因为它与我的代码的其余部分一致。”纳瓦兹通过const引用传递参数是我编写的C++程序和库中的默认约定。如果有充分的理由在特定情况下背离公约,我会这样做。