关于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)


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

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务