【破解谣言】STL的速度很不理想?都是谣言!
OI界都说,STL速度很慢,很多STL内部的函数常数很大,运行速度都很不理想,很多时候都是手写数组来模拟的。
但是实际上,STL的速度并非那些人所说的那样,运行速度很慢,这篇文章就来破解掉这个谣言。
1.关于泛型
STL的库都是用泛型来写的,应该不用举例了吧:
stack<int>s;
deque<int>q;
priority_queue<int,vector<int>,greater<int>>queue;
在不开O2优化的情况下,很多泛型的模板的性能都是大打折扣的,函数调用的开销很大,因此才会造成“STL慢”的假象。实际上,NOI从近几年开始就开始开放O2优化了,在开了优化的情况下,STL的速度可以说是有大幅的增长
2.STL需要通用性
STL是Standard Template Library,标准模板库的缩写,既然是“标准”,因此它首先保证的是通用性,必须能应对很多的特殊情况,因此不得不把复杂度升高,为了通用性而对性能做出牺牲,所以在用STL来实现某些算法的时候并非一定是最优的。
3.请相信编译器的优化能力
开了O2和不开优化的STL完全就是两个东西。
再说说其他的。OI界不用STL和它速度慢总体上关系其实并不大。实际上,还有其他的原因(例如动态内存分配,在OI界基本上是不需要的),还有很多数据结构用上STL实现反而会更加复杂(),因此这和速度没什么关系,仅仅是习惯而已。
另外现在各种算法竞赛的题目真是越出越离谱...天天卡常数没多大意义