如果前面内容你都看了的话,那你基本掌握对vector的增删改查了。这一节我们主要谈论对vector性能优化的小技巧。众所周知,vector是动态数组,在长度不够时会自动扩展,其本质就是创建一个更大的数组,把原来的数组挪过去,然后清理原来的数据。根据这个特性,我们可以在使用vector前利用reserve()来给vector设置一个保守的大小,避免一直重复这个“动态扩展”的操作,从而提高性能。该技巧在数据量大时才能看到区别:
如果频繁进行“动态扩展”:
#include<bits/stdc++.h> /* 通过reserve()预留空间实现插入元素的优化 */ using namespace std; void test() { vector<int> v; for(int i=0;i<10000000;++i) v.push_back(i); } int main(){ test(); return 0; }
此时花费时间为:Process exited after 0.6172 seconds with return value 0
如果我们预存一部分空间呢:
#include<bits/stdc++.h> /* 通过reserve()预留空间实现插入元素的优化 */ using namespace std; void test() { vector<int> v; v.reserve(10000000);//进行保守预存 for(int i=0;i<10000000;++i) v.push_back(i); } int main(){ test(); return 0; }
此时花费时间为:Process exited after 0.5276 seconds with return value 0
快了0.1s,也算是小小优化了。
总结:在竞赛或是工作中,我们可以通过reserve()成员函数进行保守空间预留,在不浪费空间的情况下实现效率的优化!
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程