在学习C++时将自己限制在STL库中是否有意义,然后在熟练使用vanilla C++之后解决boost及其添加问题?
或者你应该在学习C++的同时潜入BOOST?
STL有一些核心概念.Boost构建并扩展它们.如果您理解它们,那么直接进入Boost可能对您有用.如果没有,我会从STL开始.
各种容器类型之间的区别(序列如vector
,list
和deque
,和关联,如map
,set
及其multi*
和unordered_*
品种).有时你可以互换一个 - 有时你不能.了解他们的优势和局限.
迭代器的作用,以及它们如何在容器和算法之间提供桥梁.(这个我发现我一遍又一遍地使用).
为什么有标准算法:他们往往是微量的代码,那么他们为什么存在,可能不是很明显.了解他们与哪些容器,以及如何专门针对他们特定情况下(例如看到通用copy
不同于copy
专业的const char *
).
如何以及何时使用traits类.
如何使用绑定器(bind1st
,ptr_fun
和mem_fun
):语法可能会模糊它们的实用程序.
如何使用string
- 何时不使用它.(所有字符串类都有权衡:学习标准的优点和缺点是教育).
流和streambufs之间的区别:如何使用前者进行格式化I/O(尝试从流中读取字符串:它不是应该如此简单),后者用于执行低级快速I/O.
用于设计STL的原则是由Boost库构建和扩展的.如果你得到它们,Boost是可管理的.如果你不这样做,并且Boost最终难以遵循,你可以回到STL来获得你的支持.
(总的来说,Boost确实推动了语言的界限.如果你决定要真正推动自己的C++知识,并测试你是否真的知道你认为自己知道什么,那么它可以提供一个有趣的挑战.我使用过C++十几年来,已经教过其他人如何使用它,从那时起已经熟练掌握了更多高级语言,Boost仍然让我感到惊讶.它非常有用,但它并非无足轻重).
在看Boost之前,我建议明确处理STL.Boost意味着构建在STL之上,并且许多库最终将成为标准库的一部分.Boost库通常不如STL成熟且标准化程度低.此外,在我看来,许多boost库太过分了,添加了C++中原生不存在的"特性"(导致语法非常疯狂).在许多情况下,有更多理智的C++习语可用于解决大多数编程问题,而无需使用这些神秘的Boost库.
我认为从一开始就直接使用两者都很好.Boost提供了许多强大的功能,被广泛使用,并且拥有良好的声誉.它提供的大部分内容都与STL设计的通用编程概念相同,因此从这个意义上来说它不应该是非常混乱的.
学习东西的最好方法是使用优秀的代码,然后去看看它是如何编写的.这对Boost来说非常有用.阅读模板教程,您会受到一小时内发现的新功能的启发.然后阅读你曾经使用过的Boost标题,你会受到启发数周.
当然,不要指望立即理解那些内部 - 首先我只是使用了库而不了解你将如何构建任何这些,这很好.但是在某些时候你意识到你想要用类似的设计写一些东西,然后你会去寻找.
如果你反其道而行之,并将自己局限于"C++作为一个更安全的C",那么你就不会接触到所有这些强大的东西,所以你不会那么容易去看和理解它们,所以你会编写相当原始的代码并且学习得更慢.
编辑:忘了我有另一个想法 - 看看即将推出的C++ 0x标准.它结合了许多源自Boost的功能.也就是说,从现在开始学习C++的学生从一开始就会使用这些概念 - 你今天也可以这样做......