zoo*_*opa 31 c++ algorithm stl
我经常使用STL容器,但从未使用过与STL容器一起使用的STL算法.
使用STL算法的一个好处是它们提供了一种去除循环的方法,从而降低了代码逻辑的复杂性.我还没有列出其他好处.
我从未见过使用STL算法的C++代码.从网页文章中的示例代码到开源项目,我还没有看到它们的用途.
它们的使用频率是否超出预期?
Dav*_*vid 72
简答:总是.
答案很长:总是.这就是他们的目的.它们针对STL容器进行了优化,与您自己编写的任何东西相比,它们更快,更清晰,更惯用.您应该考虑自己编写的唯一情况是,如果您能够阐明STL算法不满足的非常具体的任务关键需求.
编辑补充:(好吧,不是真的真的总是,但如果你要问你是否应该使用STL,答案是"是".)
Jer*_*fin 17
你已经得到了很多答案,但我真的不同意他们中的任何一个.有些人非常接近标记,但未提及关键点(IMO,当然).
至少在我看来,关键点很简单:当你帮助澄清你正在编写的代码时,你应该使用标准算法.
这真的很简单.在某些情况下,你正在做的事情需要使用std::bind1st和std::mem_fun_ref(或者该命令中的某些东西)进行奥术调用,这种调用是非常密集和不透明的,其中for循环几乎是简单和简单的.在这种情况下,请继续使用for循环.
如果没有标准的算法能够达到你想要的效果,那就小心一点,再看看 - 你经常会错过一些真正能做你想做的事情(一个经常被遗漏的地方:算法<numeric>通常对非数字用途).看了几次,并确认实际上没有标准的算法可以做你想要的,而不是写for内联的那个循环(或其他),考虑编写一个通用算法来做你需要做的事情.如果你在一个地方使用它,很有可能你可以使用它两三个,这时它可以在清晰度上取得巨大成功.
编写通用算法并不是那么难 - 实际上,与编写内联循环相比,它通常几乎没有额外的工作,所以即使你只能使用它两次,你已经节省了一些工作,即使你忽略代码可读性和清晰度的改进.
Sig*_*erm 13
应该何时使用STL算法而不是使用自己的算法?
当你重视你的时间和理智,并且有更多有趣的事情要做,而不是一次又一次地重新发明轮子.
当项目需要时你需要使用你自己的算法,并且你自己编写东西没有可接受的替代方法,或者你将STL算法识别为瓶颈(当然使用分析器),或者有某种限制STL不会符合或适应STL的任务将花费比从头编写算法更长的时间(我不得不使用扭曲版本的二进制搜索几次......).STL并不完美,不适合一切,但是当你可以的时候,你应该使用它.当有人已经为你做了所有的工作时,经常没有理由再做同样的事情.
我写性能关键应用程序.这些是需要在尽可能快的时间内处理数百万条信息的事物.如果不是STL,我将无法完成我现在所做的一些事情.永远使用它们.
除了像之类的东西,还有许多好的算法std::foreach.
然而,有许多非平凡且非常有用的算法:
std::sort,std::upper_bound,std::lower_bound,std::binary_searchstd::max,std::min,std::partition,std::min_element,std::max_elementstd::find,std::find_first_of等等还有很多其他人.
像算法std::transform是用的C++ 0x lambda表达式或类似的东西很多有用的boost::lambda或boost::bind
| 归档时间: |
|
| 查看次数: |
3176 次 |
| 最近记录: |