string类和vector<char>的区别,vector和list比较
Posted 两片空白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了string类和vector<char>的区别,vector和list比较相关的知识,希望对你有一定的参考价值。
一.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倍进行增容。
以上是关于string类和vector<char>的区别,vector和list比较的主要内容,如果未能解决你的问题,请参考以下文章
Java Array Char和String在数组中的区别[重复]
vector<vector<string>> 与vector<vector<string> >区别