admin管理员组文章数量:1611938
STL中的vector,list,queue等,甚至string都支持长度或size的动态增加,这在存储事先size不知道的,或者size动态变化的多对象组合(类似于数组)来说是很方便的。事实上,为了支持size的动态变化,STL中的vector,list以及string会申请比size大的空间,即capacity,用于之后添加新的元素。这样做就可以在添加新元素时,直接存放在之前已经预先申请的空间上,免去了从新申请一块内存,再copy到新内存的开销。
vector,list,queue,以及string都有size和capacity的成员函数,根据我的一些测试,发现有一下规律(可能这些规律与具体的STL实现有关系):
1、在初始化的时候,一般size和capacity是相等的,也就是说allocator没有额外申请内存。
如string s("hello world!"); s.size()和s.capacity()都等于12。
2、在由于某种运算(append,insert,+)使得size变大时,会出现一下几种情况:
(1)capacity能够存下新增的元素,size将变大,capacity将不变;
(2)2倍capacity能够存下原来和新增的元素,它就会申请2*capacity的空间,copy原来和新增的元素,size变大,capacity变为原来两倍。
如s += “string”;那么s.size()变为18,而s.capacity()变为24。
(3)2倍capacity存不下原来和新增的元素,OK,申请原来size+新增size的空间,此时size和capacity相等。
如s += ”hello world!hello world!“;那么s.size()和s.capasity()都等于36。
版权声明:本文标题:STL中的capacity和size 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728621908a1166461.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论