2016 - 2024

感恩一路有你

vector怎么在栈上分配内存 C语言中链表的具体用途?

浏览量:3751 时间:2023-06-14 22:34:43 作者:采采

C语言中链表的具体用途?

链表主要是便于管理长度或数量不确定的数据,相对于数组,链表处理这种数据时比较节省内存。动态语言通常不大需要链表,因为动态语言的解释器帮你管理内存,但当你对空间效率或插入动作的效率有特殊要求时也可在动态语言中使用链表。链表常用于在程序中临时存储一组不定长的线性数据。具有这样的特点的数据可以用链表来保存:

1,数据是逐渐增加的

2,数据是不定长的,在存储第一个数据之前难以确定一个将来一共需要存储多少数据的上限,或者虽然可以确定上限,但这个上限又比通常大部分情况下数据可能达到的长度要大得多,因而一次性按照上限把空间分配好是不划算的。而链表则可以在每次需要增加新数据时才为之申请内存,不会造成浪费,也不会因一次申请不足而使数据的数量受到限制。

3,不需要按照序号对数据进行随机访问。C STL 中提供了list容器,就是链表。同时STL还提供了vector容器,也可以用于处理具有上述特点的数据,而且vector还支持随机访问(即可以不考虑上述第3点要求)。但vector在增加数据时,如果原先分配的连续内存已经用完则需要重新分配内存并把原有数据复制过去,这时它的插入数据的动作时间复杂度就不是O(1)了(不是常量时间了)。因而,链表适于处理的数据除了具有上述特点外,如果还有如下第4点特征,则以链表为最佳选择了:

4,希望每次添加数据、删除数据的动作的时间复杂度都是O(1)的(常量时间)。

vector的clear会释放动态内存吗?

对于数据量很小的vector,完全没必要自己进行主动的释放,因为那样对程序的效率几乎没有影响。

但是当vector中存入大量的数据后,并且都数据进行了一些操作,比如删除后,如果我们能积极主动的去释放内存,那么是非常明智的。

vector容量是怎么算的?

连续容器如:Vector,内部是预先分配一段连续缓存来保存对象,所分配内存可以保存对象的个数为容量,而已保存的对象个数为长度。

当程序调用push时候,如果容量不够了,Vector自动重新分配一段缓存,大小是原来的2倍,然后把原来的内容拷贝到新缓存中,最后释放原来的缓存。出现这种情况是很费时间的!所以Vector内部的指针的地址是可能变得的!

list 是每次添加对象的时候动态分配内存,所以没有容量的概念!

数据 链表 内存 vector 程序

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。