读了libstdc++ std::vector源码,发现你的push_back可能比你想象的慢10倍——6个隐藏的性能陷阱
一、那行push_back到底发生了什么C++程序员最熟悉的容器是谁?std::vector。面试要用它,刷题要用它,生产代码里更是到处都是。随手grep一下手头的项目,vector的出现频率是map的4倍、list的12倍、deque的20倍。能用vector的地方,大家默认就用vector——C++ Core Guidelines也是这么建议的(“By default, use vector”)。用法简单到不用过脑子:push_back往尾部塞元素,[]按下标访问,size()查个大小,搞定。写了几年C++,多数人没觉得vector有什么值得深究的。但事情没那么简单。我最近翻了一遍libstdc++的vector实现代码——主要是bits/stl_vector.h和bits/vector.tcc这两个文件,加起来2000多行。翻完之后发现,这个"最简单的容器"里藏着不少让人意外的东西。有些你以为O(1)的操作实际是O(n),有些你以为"就是移动一下指针"的操作实际会触发数百万次拷贝构造,有些你根本没注意到的类型特征——比如move构造函数上有没有一个noexcept——会让同一段代码在相同的数据量下性能差出10倍。更麻烦的是,这些问题在编译期
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2441707.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!