stl用的人多吗,有前景吗 C++ STL和Boost库,在实际开发中,应用的多吗?主要...

www.zhiqu.org     时间: 2024-06-01
说几个STL的缺点吧,虽然都是在比较极端的情况下出现,但是对于一些大项目还是会遇到的

1. 代码膨胀问题
每一个实例化过的模板类,都会膨胀出一份独立的代码,比如
std::vector<std::string>, std::vector<int>,编译后会产生两份代码,在VC2008下,每份代码大约是3-4kb,这是因为vector比较简单代码少,如果是map则会产生30-50kb的代码,因为map里有个复杂的红黑树。对于数据处理类的代码里一般会定义很多种不同的结构体,不同的结构体放到不同的容器里,就会实例化出很多个类的代码,我见过一个项目里,这样的vector就有数百个。

2. 内存使用效率问题 (以vc++2008为例)
stl在内存使用效率上是比较低效的,比如std::string,它的sizeof大概是28,因为它有一个内置的16字节数组,用来做小字符串优化的,就是说低于16字节的字符串都会至少占用28字节内存,如果刚好17字节字符串,则会占用28字节+额外分配的字符串内存,额外分配的内存是一个堆块,又有很多浪费,相比用一个char *存储字符串大约多占用了一倍内存。
还有map<>,每一个map的node都是一块独立分配的内存,如果是 map<int, int>呢,那就很悲剧了,为了存一个int要消耗几十个字节,很浪费的。
如果元素数量有百万级,那么内存占用就很可观了,这种情况下建议自己实现allocator,做内存池。

3. deep copy问题
让两个容器的实例做赋值操作,看起来就一条语句,实际上容器里的每个元素都执行了一次赋值操作。如果容器里有百万级的数据,那么一个等号就产生了几百万次的构造和析构。
传递参数的时候一定要用 const 引用,赋值可以用 swap代替。

4. 隐式类型转换
比如 有个函数
void doSomething(const std::string &str);
调用的时候
doSomething("hello");
能编译执行,但是会产生一个临时的匿名的std::string实例,把"hello"复制一遍,然后在调用完成后析构掉。如果这个发生在循环体内部有可能影响性能。

以上这些问题,在小程序里或者数据规模不大的时候,比如容器内元素只有几千这个规模,都不是什么大问题,那时开发效率才是重点,但是一旦有大数据stl容器会成为性能瓶颈的。

我并不是主张不用STL,而是要充分了解STL的优缺点,根据应用场景做选择。
作者:姚冬
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

梦幻西游里STL到后期是不是很没前途?(STL要变身套,而高级变身套一般人几乎买不起,低级的防御低)~

STL后期才很有前途,面伤,伤害又高,还能挂自动,ST这种强力输出人见人爱
玩输出不投入不可能啊,DT需要逆鳞套金刚套,法系需要定心套,这都是钱,高等级的套子都贵的离谱,哪怕是固伤也要符石装
玩输出本身就是多力或者多魔加点(极端的除外),自然就已经从舍弃血防作为出发点了,低级装防御低没关系,平时多找点挣钱事做,法抗物抗修练练,也还是不错的,最好能找个固定有医生队伍,不是很难的活儿一般没问题
纯手打望采纳

STL用的最多。
主要是常用容器用的最多。
因为接口简单统一,效率高,都是经典数据结构。
又是每个编译器都自带的,也就是说它们本身就是语言的一部分。
各个编译器都支持。

Boost就不一样了,用的远没有STL多,原因有下面几个方面
不是语言的一部分,所以编译器不自带,需要加入到工程,仅仅这个就很蛮烦
Boost库先不说是否源码编译使用,光是头文件就很多,很难单独使用某个子库而不包含全部头文件
只有少数高手可以做到,大多数开发者爱莫能助。
大多数人使用仅仅想使用其中几个很小的功能,但是却要包含全部头文件。所以大多都自己实现了,反而更适合自己。

有些场景适合用Boost
某些Boost子库本身很优秀,市面上找不到更好的更小的库替代。
因为历史原因,之前的开发就使用了Boost库。


#夹寇颜# 梦幻西游5力STL有前途么? -
(19157361629): 5力ST已成为一种主流.ST加T是任务型的.后期的ST大多是尸体ST.拉起来直接鸟的.至于加不加敏捷.个人认为不需要.既然你是RMB玩家.装备肯定是满宝石.腰带+鞋子满宝石.速度也非常快了. 5力ST的前提是你要有足够的钱搞装备 装备垃圾你就没前途.

#夹寇颜# STL有前途吗? -
(19157361629): 前期69前不怎么样,后期很牛!

#夹寇颜# C++中STL在实际工作中的作用有多大啊,值得在大学期间深入学习吗?? -
(19157361629): 那是相当的大 同样的数据结构/算法,STL肯定比90%的人写出来的要快 C++的几大特性之中其中之一就是STL, 其余还有继承,多态,模板等等 不懂这些不能说懂C++

#夹寇颜# 梦幻西游STL今后的有什么发展吗?我要全方面的带人,赚钱,比武方面的 -
(19157361629): 最近梦幻西游要出属性点+点方案的切换,对于我们玩家来说实在是太感激感动以及感谢网易了~~在此我就先感谢一下哈~~~STL,前途是有的,中期(100-飞升前)带小号抓鬼,后期(飞升后-155)带小号刷魔族,钱是不愁的. 但是前期需要很大的投入,至少你得有点卡- - 变身套不用说啦,基本上玩梦幻的人都知道,STL没这个FB都没人带做,前期(60-100)如果经济不是那么宽裕可以搞套垃圾的,+点可以4L1T,纯任务加点.. 也不知道你是要练比武号还是直接奔155,很多东西不好说的,如果需要可以把问题说详细一点,我应该可以为你解答

#夹寇颜# 算法中STL的用处很大吗? -
(19157361629): 很有用啊 基本数据结构都全了

#夹寇颜# 五力的STL有没前途啊??
(19157361629): 5力加的话以后鹰出来的数字绝对养眼! 还有STL速度慢和血少根本不用担心! 听过这样一句话没:倒下了比站着更可怕!

#夹寇颜# 梦幻西游玩STL如何?
(19157361629): 有 但是是在后期 也就是129之后 我建议是4L的 然后和辅助门派结婚生个WZ 不过ST比较费钱 我建议你还是玩LG 后期可以说是第一 还有什么问题+我QQ 407556380 本人玩了2年了

#夹寇颜# 大唐跟STL哪个更有前途 -
(19157361629): 我是玩狮驼的,说几点,第一大唐和狮驼始终平衡,我说的平衡是指各方面,我全面分析一下,赚钱和练级速度上大唐始终强于狮驼,不可否认的,但是质量是狮驼略胜大唐,大唐人多垃圾也多,你同时练一个号,狮驼125大唐可能130,我和...

#夹寇颜# 梦幻西游全力STL有前途吗?
(19157361629): 怎么样的加点都是很好的 只要不逆向加点(如LG加力量) 全力其实很猛和DT一样 不过只是为勒秒人和平时做任务快. 当生存能力低 建议多加点敏捷. 毕竟要速度才好秒人. 祝楼主游戏玩的开心 一生平安

#夹寇颜# MW和STL哪个有前途(包括飞升)详细点大师多点~!谢谢~!
(19157361629): 那还用说吗 当然是STL有前途拉 本人就有一个145的STL 很厉害的