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比较的主要内容,如果未能解决你的问题,请参考以下文章

String类和StringBuffer类的区别

Java Array Char和String在数组中的区别[重复]

vector<vector<string>> 与vector<vector<string> >区别

vector<int>v的v.at(100)函数与v[100] 有何不同

CCF -

c++如何将vector<char>转化成string