1. vector list异同⭐⭐   List:       List是一个双向链表的容器,每个元素都由一个节点表示,节点包含指向前一个节点和后一个节点的指针。    插入和删除元素的时间复杂度为O(1),因为只需要改变节点的指针,而不需要移动其他元素。    由于节点间的指针关联,内存空间不是连续分配的,因此对于需要频繁的插入和删除操作的场景,list可以更高效。    在访问元素方面,由于不具备随机访问特性,只能通过迭代器逐个遍历,时间复杂度为O(n)。    list可以有效地处理大规模数据的插入和删除,但相对于vector来说占用更多的内存空间。         Vector:       Vector是一个动态数组的容器,元素的存储是连续的。    插入和删除元素的时间复杂度为O(n),因为可能需要移动其他元素,尤其是在中间位置插入或删除元素时。    在访问元素方面,由于具备随机访问特性,可以通过下标访问元素,时间复杂度为O(1)。    向量的扩容和收缩可能会导致内存的重新分配和元素的复制,因此在需要频繁插入和删除的场景下效率较低。    向量的内存空间是连续分配的,因此对于需要高效的随机访问操作的场景,vector更合适。    相对于list来说,vector在占用内存空间方面更为节省。         总结:      综上所述,list适用于需要频繁插入和删除元素的场景,对内存占用要求较高;vector适用于需要高效的随机访问和尾部插入操作的场景,对内存占用要求较低。选择合适的容器类型取决于具体的需求和对性能的要求。   2 .vector的底层实现⭐⭐   1、底层实现   Vector在堆中分配了一段连续的内存空间来存放元素。   包括三个迭代器,first 指向的是vector中对象的起始字节位置;last指向当前最后一个元素的末尾字节;end指向整个vector容器所占用内存空间的末尾字节。          vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新的元素。vector的关键技术在于对大小的控制以及重新分配时的数据移动效率。    vector采用的数据结构是线性的连续空间(泛型的动态类型顺序表),他以两个迭代器start和finish分别指向配置得来的连续空间中目前已将被使用的空间。迭代器end_of_storage指向整个连续的尾部。    vector在增加元素时,如果超过自身最大的容量,vector则将自身的容量扩充为原来的两倍。扩充空间需要经过的步骤:重新配置空间,元素移动,释放旧的内存空间。一旦vector空间重新配置,则指向原来vector的所有迭代器都失效了,因为vector的地址改变了。      3 .vector和deque的区别⭐⭐⭐   Deque(双端队列)的特点可以总结如下:       双端操作:可以在头部和尾部进行高效的插入和删除操作。    分段结构:内部实现采用分段的数据结构,只需要移动对应段内的元素,而不需要移动整个容器中的元素。    随机访问:支持通过索引进行随机访问,可以在常量时间内访问任意位置的元素。    迭代器稳定性:插入和删除不会使已存在的迭代器失效。    增长特性:根据需要自动增长内部存储空间。    内存分配效率:在增加新的段时分配更多的内存空间,提高内存利用效率。         Deque和vector的区别   Deque(双端队列)和Vector之间的区别可以概括如下:⭐⭐⭐       插入和删除操作:Deque支持在头部和尾部高效地插入和删除元素,而Vector只能在尾部进行高效操作。    内部实现:Deque采用分段的数据结构,而Vector是一块连续的存储空间。    内存分配方式:Deque在扩容时能更高效地利用内存,并避免频繁的重分配,而Vector需要重新分配整块连续的内存空间。    随机访问性能:Vector的随机访问性能更好,而Deque的随机访问相对较低。      Deque和vector和LIST使用场景:⭐⭐       如果需要高效的随即存取,而不需要在乎插入和删除的效率,使用 vector;    如果需要大量的插入和删除,而不需要关心随即存取,则应使用 list;    如果需要随即存取,而且需要关心两端数据的插入和删除,则应使用 deque。      4.为什么ist里面还要再定义一个sort函数⭐   1.整个STL设计的指导思想是GP,即模板编程。在此思想的指导下,少了面向象编程的类继承、虚函数、多态等的设计,取而代之的是数据与方法的分离,表现在STL中将容器与算法分离,两者分别闭门造车,中间依靠迭代器联系。 2.故sort算法被单独剥离出来,与所有的容器分开。虽然想的挺好但是总有例外,list容器就是那个例外。从源码可以看出,sort函数用到的迭代器的操作链表是不可能做到的,故list需要设计自己的sort函数。   5 .STL底层数据结构实现⭐                                     Vector(动态数组)       底层数据结构为数组,支持快速随机访问和动态大小调整。                 List(双向链表)       底层数据结构为链表,支持快速插入和删除                                                         
点赞 4
评论 7
全部评论

相关推荐

06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
07-29 14:09
门头沟学院 Java
我爱o泡我爱o泡o泡果奶ooo
26加瓦鼠鼠:三个offer了,停手吧,回头是岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务