C++ STL的一点疑惑

2013-05-12 20:26:46 +08:00
 Tinet
最近在看C++的STL,确实非常强大,实现了常用的一些数据结构和通用的一些算法,有种从原始社会过度到石器时代的赶脚。
我没有做过具体的C++项目,所以有问题想请教:
实际项目中会大量用到STL里面的数据结构吗?STL在实际工程中性能如何?是不是一种必需掌握的技术?
5104 次点击
所在节点    程序员
25 条回复
jybox
2013-05-12 20:32:49 +08:00
vector, map, 还有些常见算法, 显然很常用, 应该算是必须掌握的.
STL因为通用性牺牲了一些性能, 应该不如你专为单一问题特别编写的算法, 但你很难写出性能更高的同样的通用算法了.
Tinet
2013-05-12 20:46:28 +08:00
@jybox 那在实际的工程中你们会选择编写特定的算法还是直接用STL里面的数据结构与算法
bengol
2013-05-12 21:24:39 +08:00
一般大型的公司/项目都有自己的基础设施框架
Tinet
2013-05-12 21:43:39 +08:00
@bengol 就是说底层很多东西都已经做好了吗,比如排序,查找接口什么的
middleware
2013-05-12 21:53:19 +08:00
对于通常 size 在 20 以下的小集合会用。大集合尽量少用。遇到瓶颈就毫不留情的 replace 掉。
Tinet
2013-05-12 22:11:15 +08:00
@middleware 那这个对于一般数据处理(比如一般的网站的数据)是没什么用咯?
bengol
2013-05-12 23:33:38 +08:00
@Tinet 是的
funcman
2013-05-13 00:15:07 +08:00
存指针而不是对象,性能基本上没有太大问题,也有助于减少bug。
实际项目中应用STL还是很多的,如果你是C++程序员,STL是必须学习的技术。
middleware
2013-05-13 09:11:50 +08:00
@Tinet 可以这么说。而且链表设计得尤其糟糕。见我写的一篇 blog:
http://sipoint.wordpress.com/2009/12/15/链表迷魂阵/
vietor
2013-05-13 09:19:18 +08:00
用STL库的时候,最重要的是:自己不要有写算法的冲动,寻找STL中已经实现的,可能会“绕一些弯”,但值得。STL的性能不用担心,因为大部分都采用inline方式实现,编译器能够优化的。最常用的就是map和list,因为接口都差不多,根绝性能要求替换实现也是很简单的,比如将list替换成vector
chchwy
2013-05-13 12:15:03 +08:00
我現在參與的項目是是個大約十萬行代碼的三維動畫軟件,基本方針是能用STL就盡量用STL。
相對於性能開銷,STL代碼的可靠度帶來的好處更多。而且現代compiler的優化技術非常好,下了-O2選項後,vector跟原生數組的性能差異微乎其微。
txx
2013-05-13 12:20:50 +08:00
必须是能用stl 绝对要用stl。就拿sort 来说。stl 会分析数据选择一个合适的算法排序 在深度什么情况下用heap 什么情况下用 qsort 什么情况下用基数 等等

人肉实现 一般情况下都不如 stl的
Tinet
2013-05-13 12:34:47 +08:00
@txx 这么智能啊,什么叫人肉实现?
hooluupog
2013-05-13 12:40:43 +08:00
stl还是值得信赖的,我私底下自己实现过一些算法,用原生的数组去做发现性能不比stl高多少。另外gcc 4.8已经用c++实现,里面就使用了stl。
mozartgho
2013-05-13 12:46:53 +08:00
@Tinet 实际项目中STL是必须的,性能不用担心,自己写算法很难达到STL的性能,不要怀疑大师们的能力。
matthewgao
2013-05-13 12:56:34 +08:00
反正我的项目中是用的
Tinet
2013-05-13 12:58:17 +08:00
@matthewgao 现在看来STL是必学的了,没白看这么久的英文原版书,我要进入石器时代咯
wenLiangcan
2013-05-13 13:18:31 +08:00
歪一下楼,有人写了个C的: https://code.google.com/p/libcstl/
txx
2013-05-13 13:36:59 +08:00
@Tinet 就是自己写 快排啊 红黑树啊 之类的
daoluan
2013-06-04 19:56:53 +08:00
要看你是什么实际的项目,如果涉及 C++ 的地方,STL 都会有一席之地的。你学 STL 未必是为了用它,里面可以学到很多的数据结构和算法,这些对各个方向上的程序员来说都是基本素质的东西,不能不学,STL 只是更为深入。

@wenLiangcan 这个好强。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/68600

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX