关于STL中vector的问题?

问题来源:https://www.nowcoder.com/discuss/27739?type=2&order=3&pos=57&page=2 (绝对的大神 面经)

问题:
(1)vector使用的注意点及其原因
(2)频繁对vector调用push_back()对性能的影响和原因
(3)vector重新分配内存的大小与方式
=======================update1==============================
将原来自己的回答给删除了,因为自己的回答有错误,或者不完善之处。 但是问题还是留在这里吧。
谢谢各位牛油的回复!(真心ing)


全部评论
vector,pushback触发扩容一定是增长两倍,insert触发的扩容oldsize+max(oldsize,n)。oldsize是已经用的大小(不是可用大小),n是新插入元素个数。具体可以去看源码,源码面前了无秘密
点赞 回复 分享
发布于 2017-09-02 17:55
你竟然没觉得第二点和第三点矛盾吗
点赞 回复 分享
发布于 2017-09-02 17:22
执行push_back不用每一次都重新分配,够了就直接放在后面了。
点赞 回复 分享
发布于 2017-09-02 17:20
我记得细节上还问了个问题,存到vector里的数据是在栈上还是堆上
点赞 回复 分享
发布于 2017-09-02 18:02
首先谢谢大家的回复,其中第二个问题的回答,的确跟第三个矛盾了。 第二个的影响的确不是很清楚,所以查到一个博客有说这个,所以也半信半疑的贴了上去,第一个和第三个是自己的理解。 当然,如其中一个牛友说的,应该动手实践一下才更清楚。 所以,谢谢大家的回复。 一会儿将删除这个问题。 (手机无法删除)自己动手实践才能出真知。
点赞 回复 分享
发布于 2017-09-02 17:40
只有vector没有可用空间时候pushback才会重新配置二倍空间,拷贝内容,释放原有空间。。有可用空间时候,pushback操作效率很高,毕竟只是移动指针,连续空间没办法,就是效率高
点赞 回复 分享
发布于 2017-09-02 17:40
面微软的时候面试官说vector不一定是2倍,面商汤的时候面试官让证明push_back均摊复杂度是O(1)的
点赞 回复 分享
发布于 2017-09-02 17:40
http://www.cplusplus.com/reference/vector/vector/push_back/
点赞 回复 分享
发布于 2017-09-02 17:29
首先,你应该动手试试,知道capacity和vector.reserve的意义和作用,另外是不是扩两倍,你自己试试才知道
点赞 回复 分享
发布于 2017-09-02 17:26
而且,Vector效率还算很高的,因为第三点的机制。第二点我就不评价了
点赞 回复 分享
发布于 2017-09-02 17:25

相关推荐

DKS233:(1)专业技能:Java8也太旧了,最少也要了解到JDK17吧,可以参考现在SpringBoot支持的Java最低版本,熟悉mysql基本理论具体指啥,是锁这种具体原理还是分库分表这些业务场景,spring这些专业词汇,大小写要写对(全篇简历都有这个问题,显得不严谨),熟悉使用框架进行业务开发就别写了,如果要写,起码要写到框架原理部分吧,比如aop,启动原理什么的,springcloud具体指哪些模块呢,写清楚,网关还是鉴权还是什么,“改造”没必要写吧,你直接说用springcloud开发的不就行了(2)项目经历:首先格式就有大问题,时间怎么能换行呢,调整一下,响应速度那个,如果指的是将部分数据从其他数据库转到redis的提升就别写了,因为这个不算难点,redis可以写写分布式这些,比如容灾怎么实现的,数据库同步怎么做的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务