• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Tinet
V2EX  ›  程序员

C++ STL的一点疑惑

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

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

    @wenLiangcan 这个好强。
    Ricepig
    Ricepig
    Jun 4, 2013 via iPhone
    21
    "有种从原始社会过度到石器时代的赶脚"
    黑得漂亮!
    Golevka
    Golevka
    Jun 4, 2013
    22
    其实我是冲着STL里面的一堆高阶函数去的. 我感觉STL配合lambda能秒o|o十条街
    chmlai
    chmlai
    Jun 4, 2013
    23
    如果不让用STL, 那我连C++都不用了.
    cluries
    cluries
    Jun 4, 2013
    24
    为什么项目中不能大量使用STL呢?我们反正是大量使用的.
    STL有几种实现,不同实现性能差异还是比较大的.
    然后就是STL中大坑小坑都不少,建议啃一下 Effective STL
    BOYPT
    BOYPT
    Jun 5, 2013
    25
    STL是工程用料,工程上应该尽量使用。

    这个跟在学校的“编程课”要求是不一样的,高校ACM里面经常你用STL提交的话还会因为超内存被挂。(学院派的去工程化是很多ACM大牛的代码质量那么差的原因~)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4974 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 92ms · UTC 06:16 · PVG 14:16 · LAX 22:16 · JFK 01:16
    ♥ Do have faith in what you're doing.