flu*_*els 10 c++ code-reuse standard-library
最近,在阅读这篇博文之后,我有一个危险的想法.这个想法可以这样表达:
我不需要C++标准库提供的大部分内容.那么,为什么我不实现一个不太通用但更易于使用的版本?
作为一个例子,使用STL吐出大量难以理解和损坏的编译器错误.但是,我不关心分配器,迭代器等.那么为什么我不花几个小时来实现一个易于使用的链表类,例如?
我想从StackOverflow社区了解到的是:对于C++中的大多数现有功能而言,"滚动我自己"有哪些危险,可能的缺点和可能的优势?
编辑:我觉得人们对这个想法误解了我.当时的想法是要了解自己是否可以实现一个非常小的一组被大大简化STL功能-更多的项目来教我关于数据结构等.我不建议从头开始重新发明整个车轮,只是我需要和想要了解的部分.我想我想弄清楚的是,使用STL的复杂性是否需要创建更小,更简单的版本.
重新使用提升或类似.
我编写的大部分内容都是针对大学的,我们不允许使用外部库.所以它可以是C++标准库,也可以是我自己的类.
这个问题的客观性.
这个问题不是主观的.也不应该是社区维基,因为它不是民意调查.我想要具体的论点,强调我的方法可能出现的一个优点或一个缺点.与流行的看法相反,这不是意见,而是基于经验或良好的逻辑论证.
格式.
请为每个答案发布一个缺点或一个优势.这将允许人们一次评估个人想法而不是所有想法.
请...
没有宗教战争.我不是任何语言的粉丝.我用任何适用的东西.对于图形和数据压缩(我目前正在研究的),似乎是C++.请限制您对问题的回答,否则他们将被低估.
jal*_*alf 76
那么,为什么我不实现一个不太通用但更易于使用的版本?
因为你做不到.因为你可能会对C++说些什么,它不是一种简单的语言,如果你还不是很擅长它,你的链表实现就会出错.
老实说,你的选择很简单:
学习C++,或不使用它.是的,C++通常用于图形,但Java也有OpenGL库.C#,Python和几乎所有其他语言也是如此.或者C.您不必使用C++.
但如果您使用它,请学习它并正确使用它.
如果需要不可变字符串,请将字符串创建为const.
无论其底层实现如何,STL使用起来都非常简单.
可以读取C++编译器错误,但需要一些练习.但更重要的是,它们并不仅限于STL代码.无论你做什么,你会遇到它们,以及你使用哪些库.所以习惯他们.无论如何,如果你习惯了它们,你也可以使用STL.
除此之外,还有一些其他缺点:
我不关心分配器,迭代器等
可以安全地忽略分配器.你甚至不需要知道它们存在.虽然迭代器非常出色,但将它们弄清楚可以为您节省很多麻烦.要有效使用STL,您只需要了解三个概念:
是的,与Java的库相比,STL很小,但是当你结合上述3个概念时,它包含了惊人的功率.有一点学习曲线,因为它是一个不寻常的库.但如果你要用C++花一两天以上的时间,那就值得学习.
不,我没有按照你的答案格式,因为我认为实际上给你一个详细的答案会更有帮助.;)
编辑:
很有诱惑力地说,你自己的优势在于你可以学到更多的语言,甚至可能为什么STL是其中的优点之一.但我并不是真的相信它是真的.它可能会奏效,但它也会适得其反.
正如我上面所说,编写似乎有用的C++代码很容易.当它停止工作时,很容易重新排列一些东西,比如变量的声明顺序,或者在类中插入一些填充,以使它看起来再次起作用.你会从中学到什么?这会教你如何编写更好的C++吗?也许.但最有可能的是,它只是教你"C++糟透了".它会教你如何使用STL吗?当然不.更有用的方法可能是利用StackOverflow的强大功能以正确的方式学习STL.:)
小智 43
缺点:没有人,但你会使用它.
优势:在实施过程中,您将了解为什么标准库是一件好事.
Ben*_*ves 13
我建议你了解原因:
使用STL吐出大量难以理解和损坏的编译器错误
第一
我想你应该这样做.
我敢肯定我会为此感到高兴,但是你知道,这里的每个C++程序员都喝了太多的STL coolaid.
STL是一个很棒的图书馆,但我从第一手经验中知道,如果你自己动手,你可以:
1)使其比特定用例的STL更快.2)你将只用你需要的接口编写一个库.3)你将能够扩展所有标准的东西.(我不能告诉你我多么希望std :: string有一个split()方法)...
当他们说这将是一项很多工作时,每个人都是对的.确实如此.
但是,你会学到很多东西.即使在你写完之后,你又回到STL并且再也不用它了,你仍然会学到很多东西.
| 归档时间: |
|
| 查看次数: |
3048 次 |
| 最近记录: |