C++ 动态数据结构(如链表)的意义是什么

C++ 动态数据结构(如链表)的意义是什么,c++,c,memory-management,dynamic,linked-list,C++,C,Memory Management,Dynamic,Linked List,一旦创建链表的程序在不删除动态内存的情况下关闭,并且我知道需要删除动态内存,那么在重新打开程序后如何使其恢复工作,如果我无法恢复链表,那么退出程序时链表的用途是什么。包括链接和未链接的列表、数组、单个对象和所有 如果你想让某些东西持续存在,你必须保存它,然后把它装进去晒晒太阳。就像在文本编辑器中使用“加载并保存”一样 有完整的库可以帮助解决这个问题,您可以从开始。链表本身与数据持久化无关 与其他数据结构相比,链表具有特定的性能特征。不知道查找特定元素需要多长时间,可能需要遍历整个列表(线性时间)

一旦创建链表的程序在不删除动态内存的情况下关闭,并且我知道需要删除动态内存,那么在重新打开程序后如何使其恢复工作,如果我无法恢复链表,那么退出程序时链表的用途是什么。包括链接和未链接的列表、数组、单个对象和所有

如果你想让某些东西持续存在,你必须保存它,然后把它装进去晒晒太阳。就像在文本编辑器中使用“加载并保存”一样


有完整的库可以帮助解决这个问题,您可以从开始。

链表本身与数据持久化无关

与其他数据结构相比,链表具有特定的性能特征。不知道查找特定元素需要多长时间,可能需要遍历整个列表(线性时间),但是插入和删除总是需要相同的固定时间(恒定时间)

您可能想了解STL容器,因为它们内部有类似的数据结构:


如果希望数据在应用程序的运行时间之外保持不变,则需要研究对文件、数据库的读/写操作,网络通信或任何可能满足您特定需求的持久性机制。

链表的要点是,它是一种灵活的数据结构,可供您的代码使用-它不像数组那样具有固定长度,因此您可以根据需要添加和删除项

人们谈论动态内存分配的原因是,它的内存分配取决于程序的运行时行为,而运行时行为可能会根据它读取的数据而改变。这与静态内存分配相反,静态内存分配对于每次运行的给定代码路径基本相同,对于某些问题更难处理。然而,在某些嵌入式系统上,这是您唯一的选择,在某些情况下,在静态内存分配中工作也会更快(动态分配往往会带来速度损失)

整个话题其实很复杂,经常让我头疼


动态分配的内存不会在程序运行之间持久化—当程序关闭时,操作系统会将其全部清除—因此动态内存分配和数据持久化之间没有关系。为此,您必须使用其他机制,通常存储在光盘的某个位置。进程结束后,你无法找回内存,这是现代多任务“保护内存”模式的精髓,在这种模式下,你无法访问甚至看不到属于其他进程的内存“其他进程”包括同一可执行文件的后续运行。

您认为链表与程序多次运行之间的持久性有什么关系?您可能需要查看序列化。当程序终止时,动态内存将被删除。例如,链表的用途是,如果您事先不知道需要多少项,因此一个简单的数组将不起作用。当然,它会起作用。当程序终止时,操作系统将为您进行清理。但依赖它并不被认为是一种好的做法。我想在@Sqeaky的评论中补充一点,即虽然在退出前不一定要释放堆内存,但如果您总是以确保(如使用适当的智能指针类)的方式编写代码,当你以后扩展代码时,你会得到更少的bug,比如内存泄漏,并且最终会得到一个退出点,这个退出点与以前不在同一个地方。我当然知道,但这是怎么回事?在提问之前,你应该重新表述你的问题。在某种程度上,在内心深处,他们使用指针。但这与这个答案或你的问题无关。@Ankit好的,在C中,指针都显示在链表的接口中。在C++中,情况并非如此。那又怎么样?