初学时关于C++库的疑问

Posted TenkyWoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初学时关于C++库的疑问相关的知识,希望对你有一定的参考价值。

 这是我在CSDN上的第一篇博文,我将通过博客文章记录我的编程历程。按以往的经历,很早之前学过的编程语言不及时回顾,在一两年后便会逐渐遗忘,特别当自己在一定情境下要去使用一门语言的时候,却发现自己忘的差不多了,很令人着急。为此,我决定在CSDN上将自己所学到的东西记录下来,一来,可以加深自己的印象,更深入地去理解一门语言,再者可以将此作为整理,方便日后回来温习。本人不是计算机系出身,见解颇有出入,若博文中有什么问题,恳请前辈们赐教,感激不尽!因近日在学习C++,故先从C++这门有趣的语言开始记录。

 相信不少初学者刚开始接触C++时,会将C++标准库(C++ Standard Library)和标准模板库(STL, Standard Template Library)混淆,不知其中联系,最本质的问题就是出在标准模板库这个命名上,如果将标准模板库更名为标准模板子库(Standard Template Sublibrary),便会一目了然了,STL其实就是C++标准库的一个子集,而且占据了C++标准库很大的比重。

 使用过C或者C++的人都知道,在编制程序之前,我们都需要在最前面加上#include<>,在尖括号中填入需要使用的头文件名称,而这个头文件就是C++标准库的组成部分。讲到这里我要简单地说明一下头文件(header file)和源文件(source file)的区别,我们每次要去声明一个头文件,但其实头文件里并不包含程序的具体实现,而是类似于一个接口(Interface),在其中定义了各种函数、类、变量等,在我们自己编的程序和源文件(头文件的实现)之间搭起了一座桥梁。从以上分析可以看出头文件(.h文件)的代码是比相应的源文件(.cpp文件)的代码少的,以我目前的水平是不能领略源文件里的精华了。

 为更多地认识到C++标准库里的内容,我翻阅了百度百科,上面有对C++库的准确定义,它是类库函数的集合,使用核心语言写成,现在已经发展到了C++11的标准。为此C++标准库可以被分为标准函数库面向对象类库,显然,这里所谓的库都是子库。不妨在这里举个例子,比如C++中的cmath.h头文件就是属于标准函数库里的,里面定义了很多数学函数,比如三角函数(sin,cos,tan)、取整函数(ceil,floor)等,并不涉及类,而STL中常用的各种容器(container),比如vector,list,map等都是属于面向对象类库的,因为它们都是模板类。看到这里,有人可能会问,那STL应该属于标准函数库还是面向对象类库呢?我的见解是STL并不完全包含于标准函数库和面向对象类库,准确地说,它的一部分是属于标准函数类库(内部有algorithm等头文件),另一部分则属于面向对象库类,这个应该很好理解,因为C++最大的优势就在于创建了各种数据结构的类模板,方便了程序员编程,这也是我想学习C++的出发点。讲到这里可能有点绕,但多读几遍应该能有所体会。

 C++强大的地方不止于此,因为C++标准库并非是它的全部,有些人可能注意到了文章开头关键词中提到的第三方库(Third-party Library),所谓第三方库,就是别人在某个领域开发的库,而使用者只需将该库与自己的C++工作平台进行绑定,即可利用该库的头文件(接口)进行编程工作。正是因为第三方库的存在,C++可以在更多的专业领域发挥自己的作用,简化了代码。我目前所了解到的第三方库有boost(C++标准库的扩展)、QT(图形用户界面应用程序框架)、OGRE3D(游戏开发)、OpenCV(计算机视觉开源库)等。在众多的第三方库中,我只接触过OpenCV,使用过第三方库的人都知道第三方库能带给使用者不一样的体验,因为它相当于在C++的基础上创造出了更多有趣的东西,也方便了不同领域的工作者。当然,有趣归有趣,要认真地学完一个库还真不是一件容易的事情,更何况自己连C++的标准库都没有完全吃透,不花个三年二载恐怕很难在某个库里有所造诣。

 最后,我要将上面提到的内容以图的方式呈现在下面,当作一个总结。

 至此,C++的整体结构就呈现在眼前了。而我后面也将循着C++标准库的思路进行记录,深入学习各种头文件后在博文上发表自己的理解,与大家共同探讨。下一篇我将从STL中非常有用的类模板开始讲起。

以上是关于初学时关于C++库的疑问的主要内容,如果未能解决你的问题,请参考以下文章

(我是初学者)自己关于java初学函数方法时的一些疑问即验证

关于如何使用简单的 C++ 库(不使用 .net)和使用该库的 C++ 项目创建 .sln 的基本说明?

关于可序列化交易的一些疑问?

初学者:AVR C++ Atmel Studio 6

关于STM32系统构架的一点见解

怎样学好C++编程语言