首页 > 解决方案 > 将 [] 运算符与链表一起使用?

问题描述

我正在尝试在 C++ 中创建一个链接列表,其工作方式类似于用户端 Python 中列表的工作方式。我正在尝试实现的一项功能是使用 [] 运算符来引用节点的值,从而使您可以轻松访问它。

这是我为它编写的成员函数,目前它只是作为一个 getter:

int operator [] (int index) {
    if (index >= length) { // length is a member variable
        throw out_of_range("");
    }

    IntNode* current = head;
    for (int i = 0; i <= index; i++) {
        if (current->index == index) {
            return current->value;
        }
        current = current->next;
    }
}

我的问题是:有没有办法让 [] 运算符既可以用作 getter 也可以用作 setter?

例如,在用户端,getter 的用法如下:

int someInt = myList[1];

一个 setter 的用法如下:

myList[1] = 67;

当然,这假设myList在索引 1 处有一个“元素”。此外,myList它是对对象的引用List(不是指针)。

注意:我计划在某个时候通过模板使这个结构工作。现在我只想让它与整数一起工作。

标签: c++

解决方案


您可以提供一个可变版本和一个常量版本。如果可变版本返回一个引用,那么您可以分配给它。

int& operator [] (int index);
const int operator [] (int index) const;

我不会说这是一个主意。尝试将链表视为数组,尤其是如上所示,不会非常有效。


推荐阅读