C++ STL的一点疑惑 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题复制粘贴 AI 生成的内容
Tinet
V2EX    程序员

C++ STL的一点疑惑

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

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

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

    这个跟在学校的“编程课”要求是不一样的,高校ACM里面经常你用STL提交的话还会因为超内存被挂。(学院派的去工程化是很多ACM大牛的代码质量那么差的原因~)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1028 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 18:06 PVG 02:06 LAX 10:06 JFK 13:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86