在STL中基本容器有
string vector list deque set map
set 和
map都是无序的保存元素只能通过它提供的接口对里面的元素进行访问
set 集合, 用来判断某一个元素是不是在一个组里面使用的比较少
map 映射相当于字典把一个值映射成另一个值如果想创建字典的话使用它好了
string vector list deque set 是有序容器
string 是basic_string的实现,
在内存中是连续存放的为了提高效率,都会有保留内存,如string s= "abcd",这时s使用的空间可能就是255, 当
string再次往s里面添加内容时不会再次分配内存直到内容>255刊才会再次申请内存因此提高了它的性能当内容>255时string 会先分配一个新内存然后再把内容复制过去再复制先前的内容
对string的操作如果是添加到最后时一般不需要分配内存所以性能最快如果是对中间或是开始部分操作如往那里添加元素或是删除元素或是代替元素这时需要进行内存复制性能会降低
如果删除元素string一般不会释放它已经分配的内存为了是下次使用时可以更高效
由于string会有预保留内存所以如果大量使用的话会有内存浪费这点需要考虑还有就是删除元素时不释放过多的内存这也要考虑
string中内存是在堆中分配的所以串的长度可以很大而char[] 是在栈中分配的长度受到可使用的最大栈长度限制
如果对知道要使用的字符串的最大长度那么可以使用普通的char[] 实现而不必使用
string
string用在串长度不可知的情况或是变化很大的情况
如果string已经经历了多次添加删除现在的尺寸比最大的尺寸要小很多想减少string使用的大小可以使用
string s = "abcdefg";
string y(s); //因为再次分配内存时y只会分配与s中内容大一点的内存所以浪费不会很大
s.swap(y);//减少s使用的内存
如果内存够多的话就不用考虑这个了
capacity是查看现在使用内存的函数大家可以试试看
string分配一个一串后的capacity返回值还有其它操作后的返回值
vector
vector就是动态数组它也是在堆中分配内存元素连续存放有保留内存如果减少大小后央存也不会释放如果新值.当前大小时才会再分配内存对最后元素操作最快(在后面添加删除最快) 此时一般不需要移动内存只有保留内存不够时才需要对中间和开始处进行添加删除元素操作需要移动内存如果你的元素是结构或是类那么移动的同时还会进行构造和析构操作所以性能不高
访问方面对任何元素的访问都是O(1) 也就是是常数的所以
vector常用来保存需要经常进行随机访问的内容并且不需要经常对中间元素进行添加删除操作
相比较可以看到vector的属性与string差不多同样可以使用capacity看当前保留的内存使用swap来减少它使用的内存
总结:需要经常随机访问请用
vector
list
list就是链表元素也是在堆中存放每个元素都是放在一块内存中
list没有空间预留习惯所以每分配一个元素都会从内存中分配每删除一个元素都会释放它占用的内存,这与上面不同可要看好了
list在哪里添加删除元素性能都很高不需要移动内存当然也不需要对每个元素都进行构造与析构了所以常用来做随机操作容器但是访问list里面的元素时就开始和最后访问最快访问其它元素都是O(n) 所以如果需要经常随机访问的话还是使用其它的好
总结:如果你喜欢经常添加删除大对象的话那么请使用
list
要保存的对象不大构造与析构操作不复杂那么可以使用
vector代替
list<指针> 完全是性能最低的做法这种情况下还是使用
vector<指针>好因为指针没有构造与析构也不占用很大内存
deque
双端队列
也是在堆中保存内容的
它的保存形式如下
[堆1]
... ...
[堆2]
... ...
[堆三]
每个堆保存好几个元素然后堆和堆之间有指针指向
看起来像是
list和
vector的结合品不过确实也是如此
deque的让你可以在前面快速的添加删除元素或是在后面快速的添加删除元素然后还可以比较高的随机访问速度
vector是可以快速的在最后添加删除元素并可以快速的访问任意元素
list是可以快速的在所有地方添加删除元素但是只能快速的访问最开始与最后的元素
deque在开始和最后添加元素都一样快并提供了随机访问方法像
vector一样使用[]访问任意元素但是随机访问速度比不上
vector快因为它要内部处理堆跳转
deque也有保留空间另外由于
deque不要求连续空间所以可以保存的元素比
vector更大这点也要注意一下还有就是在前面和后面添加元素时都不需要移动其它块的元素所以性能也很高
分享到:
相关推荐
STL关联容器入门
该文档详细讲解了C++中标准容器的使用,是一份不错的学习资料哦
STL的容器deque的详细使用方法和文档 6.0代码
STL容器比较STL容器比较STL容器比较
STL容器,用思维导图的方式表达了一下,其中一些所有容器都通用的函数没有列举如a.size(),a.capacity()等。。希望对各位有帮助.
c++ STL容器使用代码,方便学习 vector string deque queue list set map multiset multimap 容器的API使用方法等
STL -容器,string容器
STL容器和算法函数表. 玩C++清一定看看STL
详细讲解了STL中vector容器的用法.
stl中容器的比较,能对所学的容器有一个很好的认知和对比
STL容器的一些使用简介
C++/STL容器设计相关ppt及习题,属于教学文档
STL顺序容器:list的使用。 (Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢. )
我自己写了一个vector,写了一个这样子的东西,收获挺大的,新手多打打代码
STL关联容器概述1
gdb中查看stl容器命令封装脚本 gdbinit.rar
MyTinySTL - 用 C 11 实现的小型 STL(容器库+算法库)。代码结构清晰规范、包含中文文档与注释,并且自带一个简单的测试框架,适合新手学习与参考
c++中STL的vector,Map,set等容器还有一些好的算法已经写好了,只需我们去调用,学好STL对算法很有帮助
stl set容器 详细 使用方法 有每个接口的说明
STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、stac)。 1、顺序性容器 (1)vectorvector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问。...