我有一个话题,我很困惑,我需要详细说明.它是使用const版本和非const版本重载的运算符.
// non-const
double &operator[](int idx) {
if (idx < length && idx >= 0) {
return data[idx];
}
throw BoundsError();
}
Run Code Online (Sandbox Code Playgroud)
我理解这个函数的一部分,取一个索引并检查它的逻辑,返回类中数组数据的索引.还有一个具有相同主体的函数,但函数调用为
const double &operator[](int idx) const
Run Code Online (Sandbox Code Playgroud)
为什么我们需要两个版本?
此示例问题也可能有助于详细说明.下面的每个实例使用哪个版本?
Array a(3);
a[0] = 2.0;
a[1] = 3.3;
a[2] = a[0] + a[1];
Run Code Online (Sandbox Code Playgroud)
我的假设是只调用const版本,a[2]因为我们不想冒险修改a[0]或a[1].
谢谢你的帮助.
我很好奇为什么从双链表中删除节点比单个链表更快.根据我的讲座,双链表需要O(1),单个链表需要O(n).根据我的思考过程,我认为它们都应该是O(n),因为你必须遍历所有元素,所以它取决于大小.
我理解它与每个节点都有一个前一个指针和一个指向下一个节点的下一个指针这一事实有关,我只是无法理解它是如何在O(1)意义上的常量操作