《vector和list 的对比》
创始人
2024-03-12 17:46:05
0

vector的优点:

1.下标随机访问:

        vector这个类中重载了[]这个符号,可以让其去下标访问,但是他自己本生是一个重载函数的调用,所以会存在一定的性能问题。

2.尾插尾删效率高:

        因为vector本质上就是一块连续的空间,所以再这块空间中,尾插尾删除数据是非常高的,直接使用下标访问就行,删除直接让其的size的大小减一。

3.cpu高速缓存命中率高:

        因为内存空间是连续的,当cpu告诉缓存加载数据的时候,是加载一部分的空间,不仅仅是你需要的一块数据的空间,所以你访问时,你加加的时候,不需要重新加载一块新的空间,这也就节省了很多时间和提升了程序运行的效率。

vector的缺点:

1.头插头删效率低

        头插头删效率很低,因为你需要挪动后面一整块数据,时间复杂度为O(N),这是一件非常恼火的事情。

2.扩容有消耗,还存在一定的空间浪费

        扩容的时候,会将原本的空间丢弃,然后开辟出一块新的空间,这样就会造成计算机额外的消耗,且开辟的空间大小无论是原本的两倍,一点五倍或者其他,都会存在一定的空间浪费,如果你开始数据小的,浪费的并不是十分明显,如果当数据量达到一定的时候,你就会发现,你开辟两倍的空间,是非常多余的。

list的优点:

1.按需申请释放,无需扩容。

        因为list的底层就是一个带头的双向链表,所以当你需要插入节点的时候,你只需要申请一个节点,然后将这个节点插入即可,是没有空间浪费的。

2.任意位置插入数据

        从底层我们也知道,list就是一个带头双向链表,既然是个链表,我们就可以随意的插入数据,空间复杂度为O(1)。且不需要挪动数据。

list的缺点:

1.不支持下标随机访问

        你如果想要寻找其中的数据或者是找到某个特殊的节点,你只能使用迭代器一个个去遍历,这也是一件十分恼火的事情。

2.cpu高速缓存命中率低

        因为list本生就是一个带头双向链表,不存在连续空间存储的问题,所以cpu告诉缓存率低。这也是一件非常恼火的事情。

【二】迭代器失效的问题

        迭代器失效这个问题在我们写代码的时候需要时刻注意的,因为迭代器失效之后轻则代码失效,重则,出现野指针问题,导致代码直接崩溃。

       vector中只有删除和插入会出现迭代器失效的问题,因为插入会扩容,扩容会展现一块新的地址空间,而你的迭代器还是指向原本的那块空间,这样就出现了越界的问题,而删除的时候,你将原本的数据删除了,但是你的迭代器还是指向那块空间,得不到更新,这样的话就会使你的程序产生错误。

        list中仅仅会有一个erase会出现迭代器失效的问题,因为它是一个带头双向链表,不存在扩容的问题。而erase掉之后,你的迭代器指向的还是原本的那块空间,此时那块空间已经被释放了,也就是不存在了,会出现野指针的问题。

string其实也有迭代器失效问题,insert/erase失效和vector类似

        但是一般情况下,我们是不关注string的失效,因为string/erase常用函数都是下标支持的,迭代器支持的函数调用时非常少。

        以上就是这期的全部内容了,如果哪里阐明的有问题的话,还请一部于评论区进行斧正,如果没错的话还请一件三连。毕竟码字不易。

相关内容

热门资讯

清朝有很多有名的历史人物,能给... 清朝有很多有名的历史人物,能给大家说几个清朝的历史人物吗?林则徐,张之洞,乾隆皇帝,曾国藩,朱耷,这...
曹丕的“太子四友”指的是谁 曹丕的“太子四友”指的是谁首先说,曹丕这四个,陈群司马懿是顶级的谋士和政治家,吴质有些小聪明,朱铄不...
在这次遇难者中存在了几名幸存者... 在这次遇难者中存在了几名幸存者。这句话是不是逻辑错误这句话的逻辑没有问题,有问题的是用词不当。遇难者...
在中国古代,有许多充满哲学智慧... 在中国古代,有许多充满哲学智慧的成语典故、寓言故事,如...在中国古代,有许多充满哲学智慧的成语典故...
清澈的意思是什么,… 清澈的意思是什么,…清净而明澈清而透明【造句】看着他清澈而又天真的眼眸,我的心久久不能平静……
蚂蚁森林合种爱情树一方退出怎么... 蚂蚁森林合种爱情树一方退出怎么找回来两个人合种的爱情树,我退出来,我怎么再次加入进去继续合作那个树?...
有好看的古代修炼小说推荐吗? 有好看的古代修炼小说推荐吗?古代重生穿越修炼......让我帮你找一下这些古代修炼的小说,找到这些类...
女主重生爱上前世辜负的人 女主重生爱上前世辜负的人重生我是你正妻渣女重生之竹马重生之弃渣重生之夫君可欺重生之换我疼你重生妇归来...
华胥引有广播剧吗 华胥引有广播剧吗现有的华胥引的广播剧是忆语广播剧社出品的,只有十三月和杯(这个是错字,请无视,居然输...
选文韩麦尔先生在说了,我的朋友... 选文韩麦尔先生在说了,我的朋友们我就要离开你们呢了,再见了银头鲑鱼tj75rt6yturdrruv ...
中通快递从北京保定市到广东揭阳... 中通快递从北京保定市到广东揭阳普宁要多久?中通快递从北京保定市到广东揭阳普宁要多久?从北京到广东需要...
关于离婚悲伤的歌曲 关于离婚悲伤的歌曲关于离婚悲伤的歌曲林俊杰《可惜没如果》 张靓颖《我走以后》 金志文《流着泪说分手》...
形容文笔差怎么说啊? 形容文笔差怎么说啊?哥哥姐姐,麻烦问下,我是做文员的,形容文案方面的工作很差应该怎么说啊?粗鄙怎么样...
我想做未婚妈妈,可行吗? 我想做未婚妈妈,可行吗?没关系吧?我同学好多他们妈妈都是30岁以后省得他们,都没事啊,但是如果你自己...
如何在两个excel表格里筛选... 如何在两个excel表格里筛选出重复的名字如何在两个excel表格里筛选出重复的名字1、电脑打开EX...
且试天下 哪些小说是用白绫做武... 且试天下 哪些小说是用白绫做武器的?神雕侠侣吖- -..小龙女一开始就是用白绫的聊斋 辛十四娘嘿嘿~...
自带高冷体质,笑起来温暖又治愈... 自带高冷体质,笑起来温暖又治愈的星座,你了解吗?虽然天生高冷体质,但是笑起来特别的温暖治愈的新作用天...
火星未解之谜 火星未解之谜多列举一些,每个事例最好长一点,谢啦~“火星人脸”, “地表被水冲击河道”,“原始大气和...
我是1991年10月4号生的,... 我是1991年10月4号生的,是什么星座啊有的说是处女座有的说是天平座,糊涂了,到底是什么啊很负责任...
梦见白狐狸,然后当时我骑着自行... 梦见白狐狸,然后当时我骑着自行车,我想躲开它,他很凶的的追赶我,最后它向我扑了过来,然后我就醒乐.你...