如果前面内容你都看了的话,那你基本掌握对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()成员函数进行保守空间预留,在不浪费空间的情况下实现效率的优化!

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)