vc6.0 下关于vector的建议(reserve())

来源:互联网 发布:程序员计算器 编辑:程序博客网 时间:2024/06/05 08:22

在看STL标准库时,作者曾说,STL中vector几乎以一种哲学的方式管理其容量的大小,所以在谈到分期摊坏的复杂度时,几乎是可以不考虑的。但在vc6.0中则不然(vc6.0对STL不完美支持是总所周知的)。代码如下:

int main(){std::vector<Person> coll;//coll.reserve(100);coll.push_back(Person("test"));coll.push_back(Person("word"));coll.push_back(Person("rule"));coll.push_back(Person("map"));coll.push_back(Person("set"));coll.push_back(Person("vector"));coll.push_back(Person("list"));coll.push_back(Person("deque"));coll.push_back(Person("michael"));return 0;  }

在Person类中,构造函数调用输出字符“2”,拷贝构造调用输出字符“123”,析构输出“~person”和参数。终端结果如下:

2
123
~person
test
2
123
123
~person
test
~person
word
2
123
123
123
~person
test
~person
word
~person
rule
2
123
~person
map
2
123
123
123
123
123
~person
test
~person
word
~person
rule
~person
map
~person
set
2
123
~person
vector
2
123
~person
list
2
123
~person
deque
2
123
123
123
123
123
123
123
123
123
~person
test
~person
word
~person
rule
~person
map
~person
set
~person
vector
~person
list
~person
deque
~person
michael
2
123
~person
many
148 ms
~person
test
~person
word
~person
rule
~person
map
~person
set
~person
vector
~person
list
~person
deque
~person
michael
~person
many
Press any key to continue

从结果可以看出,每push_back一次,vector的中内容就需重新拷贝一次,vetor所能容纳的元素数量编译器没做优化。

将代码中的第二行屏蔽取消,结果如下:

2
123
~person
test
2
123
~person
word
2
123
~person
rule
2
123
~person
map
2
123
~person
set
2
123
~person
vector
2
123
~person
list
2
123
~person
deque
2
123
~person
michael
2
123
~person
many
48 ms
~person
test
~person
word
~person
rule
~person
map
~person
set
~person
vector
~person
list
~person
deque
~person
michael
~person
many
Press any key to continue

此时对vector容纳元素能力进行设定,没有出现大量的拷贝,故vc6.0下建议vetor声明后即调用reserve();设置,否则插入元素的代价是巨大的。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果8开不开机怎么办 mac电脑打不开机怎么办 steam改密码上限了怎么办 qq加密了登不了怎么办 别人登我的淘宝怎么办 植物2被禁止登录怎么办 淘宝网东西未收到怎么办 淘宝网卖家不许退货退款怎么办 身份证以前开过淘宝店怎么办 支付宝登录名尚未激活怎么办 淘宝退货卖家不收货退款买家怎么办 淘宝账号刷得太多违规怎么办 闲鱼交易关闭了怎么办 淘宝店开了没做怎么办 微店店铺严重违规怎么办 淘宝违规扣2分怎么办 淘宝被扣6分怎么办 淘宝被扣2分怎么办 淘宝被海关扣了怎么办 淘宝被扣36分后怎么办 淘宝售假查封店铺资金怎么办 淘宝店扣48分怎么办 淘宝a内被扣48分怎么办 饿了么店铺满减怎么办 淘宝店扣a48分怎么办 淘宝短信营销无法获取人群怎么办 淘宝货发了退款怎么办 极速退款后卖家不确认收货怎么办 把货退了卖家不退款怎么办? 退款了又收到货怎么办 退货忘了填单号怎么办 手机换号了淘宝怎么办 换了手机支付宝怎么办 手机丢了微信登不上去了怎么办 前面手机丢了微信登不上去怎么办 淘宝密码忘了怎么办呢 融e借逾期一天怎么办 拼多多处罚下架怎么办 永久无法解绑支付宝怎么办 淘宝下单购买人数太多怎么办 新浪微博被拉黑暂时无法评论怎么办