string类和vector<char>的区别,vector和list比较

15 篇文章 1 订阅

一.string类和vector<char>的区别

string类是一个保存字符的动态数组,由于其中有一个接口c_str,转化成c语言的字符串,要以\0结尾,所以string类最后会有一个\0.

vector<T>是一个保存T类型的动态数组,vector<char>也是保存字符的动态数组,但是,不会以\0结尾,不保存\0.

二.vector和list比较

1.vector和list的区别

vector底层是一个大小可变数组的序列容器。迭代器是原生态指针。

        优点:1.可以使用下标来进行访问,效率高。

                2.缓存命中率高。

        缺点:1.在头部或中间插入或删除数据需要挪动数据,效率低

                2.空间不够需要扩容,扩容是按一定比例进行扩容的,如果保存数据较少,导致空间浪费。

list底层是一个带头双向循环链表。迭代器非原生态指针(封装成了一个类,成员变量是结点指针)

        优点:任意位置插入删除不需要挪动数据,效率高。

         缺点:1.不支持下标随机访问。

                2.缓存命中率低。

总结:list和vector是相辅相成,互补的容器。

什么可以解决list和vector问题的容器,deque(双端队列)可以解决,但是deque不完美,迭代器遍历效率低。相同10w数放vector和deque里,排序效率deque高于vector3-4倍

 

2.vector如何增容?

        在头部或中间插入删除要挪动数据,在尾部直接插入。但是空间不够需要增容,增容涉及深拷贝的问题。为了均衡空间和效率,增容按一定比例增容,避免频繁增容。一般按1.5倍或者2倍进行增容。

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值