STL:string和vector的容量变化-创新互联

我是在vs2013下所做的测试,实验结果可能和在vc6.0或者其他编译器上有所不同.

创新互联建站是一家专注于网站建设、成都做网站与策划设计,青山网站建设哪家好?创新互联建站做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:青山等地区。青山做网站价格咨询:028-86922220

当string的元素个数<=15时,容量恒为15,当新元素增加等导致容量增加时,取原容量的1.5倍和原容量+16的一个倍数作比较,取大值.那么这个倍数怎么取呢?只要原容量一次次的增加16,当数值大于所需新容量时即可.

string容量第一个例子:

#include <iostream>#include <string>using namespace std;int main()
{    string s = "asda";    cout << s.capacity() << endl;   //15 :刚开始元素个数≤15时,容量分配为15.
    s.reserve(16);    cout << s.capacity() << endl;   //31 :16*1.5=24 15+16=31,所以新容量为31.
    s.reserve(33);    cout << s.capacity() << endl;   //47 :31*1.5=47.5 31+16=47,所以新容量为47.
    s.reserve(49);    cout << s.capacity() << endl;   //70 :47*1.5=70 47+16=63,所以新容量为70.
    s.resize(85);    cout << s.capacity() << endl;   //105 :70*1.5=105 70+16=86,所以新容量为105.
    s.reserve(111);    cout << s.capacity() << endl;   //157 :105*1.5=157.5 105+16=121,所以新容量为157.
    s.resize(185);    cout << s.capacity() << endl;   //235 :157*1.5=235.5 157+16*2=189,所以新容量为189.

    system("pause");    return 0;
}123456789101112131415161718192021222324

string容量第二个例子:

#include <iostream>#include <string>using namespace std;int main()
{    string s = "asda";    cout << s.capacity() << endl;   //15
    s.reserve(16);    cout << s.capacity() << endl;   //31 :15*1.5=22.5 15+16=31,所以新容量为31.
    s.resize(49);    cout << s.capacity() << endl;   //63 :31*1.5=47.5 31+16*2=63.所以新容量为63.
    s.reserve(85);    cout << s.capacity() << endl;   //95 :63*1.5=94.5 63+16*2=95.所以新容量为95.
    s.resize(176);    cout << s.capacity() << endl;   //191 :95*1.5=142.5 95+16*6=191.所以新容量为191.
    s.reserve(235);    cout << s.capacity() << endl;   //286 :191*1.5=286.5 191+16*3=239.所以新容量为286.

    system("pause");    return 0;
}12345678910111213141516171819202122

vector的容量变化和string不同,刚开始有多少元素,容量则为多少,然后用原容量的1.5倍和新需求量相比,取大值,但是调用reserve时,则是直接配置成指定容量,且容量不会变小!

#include <iostream>#include <vector>#include <algorithm>using namespace std;int main()
{                                   //当容量自动增加后的过程是:重新配置,元素移动,释放原空间.非常麻烦.
    vector<int> s;    cout << s.capacity() << endl;   //0

    s.push_back(1);    cout << s.capacity() << endl;   //1

    s.insert(s.begin(), 6, 1);      
    cout << s.capacity() << endl;   //7 :1*1.5=1.5 1+6=7.所以新容量为7.

    s.resize(17);    cout << s.capacity() << endl;   //17 :7*1.5=10.5 17.所以新容量为17.

    s.resize(26);    cout << s.capacity() << endl;   //26 :17*1.5=25.5所以新容量为26.

    s.reserve(34);    cout << s.capacity() << endl;   //34:

    s.resize(50);    cout << s.capacity() << endl;   //51:34*1.5=51.5>50所以新容量为51.

    system("pause");    return 0;
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

新闻标题:STL:string和vector的容量变化-创新互联
URL网址:https://www.cdcxhl.com/article12/dhjcdc.html

成都网站建设公司_创新互联,为您提供品牌网站制作定制网站搜索引擎优化做网站定制开发商城网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站优化排名