c++ - 如何制作一个处理双向链表节点的函数?
问题描述
我在 C++ 中实现了双向链表作为类
在 main.cpp 中,我将其他类的对象推送到这个列表中,如下所示
list.insertBack(ClassA(name, description));
但是在那之后我需要改变这个对象的某个字段,例如执行一个改变人口的方法。为此,我需要以某种方式从列表中处理该对象,就像我对常规数组(smth like a[i]
)所做的那样。为此,我的 List 类中需要一个特殊的方法/函数。我该如何实施?
解决方案
您只需要operator[]
为您的班级提供一个:
template<class T>
class List {
// your private interface
public:
// your other public interface
T& operator[](unsigned int i)
{
Node* n = this->head;
for (; i>0; --i)
{
n = n->next;
}
return n->data;
}
};
在你的主要你可以简单地使用它
int main() {
List<double> l;
l.insertBack(0.0);
l.insertBack(1.0);
l.insertBack(2.0);
l.insertBack(3.0);
std::cout << l[2] << std::endl;
}
请注意,您可能还需要const
此函数的版本。这是一个演示。
注意:正如@Botje 所指出的,您可能还想对输入进行一些完整性检查。如果i
等于或大于现有节点的数量,我的代码片段会取消引用 anullptr
并且您会得到未定义的行为。
推荐阅读
- sdn - Facuet OpenFlow 速率限制
- github - 如何为 lint 和运行测试的拉取请求编写管道
- sql - 如何使用sql识别长值
- javascript - FFMpeg Discordjs Music Bot 在随机时间后随机停止播放音乐
- c# - 访问列表时的实体框架 NullReferenceException
- r - 在 Shiny 中按周顺序调整选择
- angular - 为什么 Angular Component 变量会在服务方法调用时更新?
- javascript - 如何通过 Web 应用程序中的链接共享 .ics 文件?
- pytorch - 在::张量到 UIImage
- visual-studio - 如何从汽车中提取 DER 中的证书并创建 X509Certificate2?